일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 함수
- page
- 플러터
- typescript
- 애니메이션
- 오류
- 깃허브
- Animation
- GitHub
- JavaScript
- Flutter
- .NET
- 닷넷
- 마우이
- Binding
- MS-SQL
- listview
- React JS
- HTML
- 바인딩
- Maui
- Firebase
- AnimationController
- MSSQL
- 파이어베이스
- db
- MVVM
- 리엑트
- 자바스크립트
- spring boot
- Today
- Total
개발노트
ClickOnce로 게시된 .app-ms에 다른 프로그램의 Arguments 값 받아오기 본문
시작하기 앞서 이해가 필요한 부분이 있어 ClickOnce에 관련해서 먼저 설명드립니다.
문제점 1
먼저, IIS를 통해 ClickOnce로 게시된 프로그램은 설치 경로를 변경할 수 없습니다.
뿐만 아니라 디렉토리 명칭이 암호화되어 난수와 문자로 길게 나열된 파일이름으로 생성되고, 이는 설치한 PC마다 각각 다른 디렉토리명칭을 가지고 있습니다.
이 때문에 ProcessStartInfo 를 이용하여 .exe 파일을 실행시키며 Agrument를 넘기는 것은 일반적인 방법으로 불가능합니다.
문제점 2
여기서 할 수 있는 방법은 고정된 경로에 실행파일을 만들어 주는 것 입니다.
다행히도 ClickOnce에는 고정된 경로에 바로가기(shortcut)를 만들 수 있습니다.
하지만 여기서 또 하나의 문제는 바로가기의 파일 확장자명이 .exe 가 아닌 appref-ms 라는 점입니다.
해결방안
1. 고정된 경로에 바로가기(.appref-ms)를 생성한다.
2. 바로가기(.appref-ms) 프로그램이 실행된 뒤 Arguments를 받을 수 있도록 소스를 작성한다.
(*ClickOnce로 .exe 파일을 고정된 경로에 생성하는 방법은 찾지 못함)
문제 해결 시작
▶실행되는 프로그램
1. 바로가기가 생성될 경로를 아래와 같은 방법으로 정해줍니다.
1) [프로젝트] > [속성] 클릭
2). [게시] > [옵션] > [설명] 에 아래와 같이 입력하면 아래와 같은 경로에 바로가기가 생성됨
C:\Users\PC이름\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\게시자이름\제품군이름.appref-ms
2. 실행될 프로그램 소스를 아래와 같이 수정해줍니다.
if (AppDomain.CurrentDomain.SetupInformation.ActivationArguments == null) return;
string str = AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0];
Properties.Settings.Default.sID = str;
1) Arguments가 Null일 경우를 예방하기 위해 if문으로 예외처리함
2) AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0] 를 통해
실행시킨 프로그램으로 부터 하나의 Arguments를 str 라는 string형 변수로 받음
(아래 참고링크에서 하나만 받을 수 있다는 글로 보아 여러개를 받는 것은 안되는 것같습니다.
따라서 ActivationData[0] 처럼 인덱스가 0인 배열에 Arguments 값이 들어있습니다. )
3) 미리 선언해 두었던 글로벌 변수 sID 에 str 값을 넣음
(*Program.cs 나 MainForm 실행단에 소스를 넣는 것을 추천드립니다.)
- .exe일 경우 Program.cs 의 Main 함수에 string형 배열로 argument를 받을 수 있다.
static void Main(string[] args)
{
if (args.Length > 0)
{
Properties.Settings.Default.sID = args[0];
}
}
3. 아래와 같이 게시하여 바로가기를 고정된 경로에 생성합니다.
1) 게시옵션 > 매니페스트에 [응용 프로그램으로 URL 매개 변수가 전달되도록 허용] 체크하기
2) 게시 > 설치 모드 및 설정에 [온프라인으로도 응용 프로그램 사용 가능([시작] 메뉴에서 시작 가능)] 체크하기
3) 게시 후 아래 경로에 생성된 바로가기 확인
▶실행시키는 프로그램
1. 아래와 같이 소스를 작성한다.
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = @"C:\Users\PC이름\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\게시자이름\제품군이름.appref-ms";
psi.Arguments = sID;
Process.Start(psi);
이 처럼 appref-ms를 실행시키면, ClickOnce로 배포된 버전을 자동 업데이트를 할 수 있다.(Url 접속방식)
끝
'미분류 노트' 카테고리의 다른 글
GitHub Page 무료 호스팅 이용하기 (0) | 2023.05.15 |
---|---|
1. [C#] Excel, csv 파일 DataTable로 변환시키기 (1) | 2023.01.13 |
빌드는 성공하지만 팅긴다면.. (0) | 2022.11.21 |
Lottie File 커스텀 하기 (0) | 2022.11.16 |
[VisualStudio] Branch Merge 충돌 해결하기(whith .gitignore) (0) | 2022.10.24 |