웹브라우저에서 컴퓨터에 설치되어있는 응용프로그램을 실행시키는 방법은 여러가지가 있지만
이 글에서는 Custom Url Schemes 를 사용하는 방법을 설명한다.
Windows 에서 Custom Url Schemes 를 사용하려면 Windows 의 Registry 에 Url Scheme 를 등록해야한다.
C# 에서 Registry 를 사용하기 위해선 Microsoft.Win32 네임스페이스를 사용해야하므로 아래와 같이 using 해준다.
using Microsoft.Win32;
RegistryKey 형식의 인스턴스에 CreateSubKey 메소드를 사용하여 인자값을 넘겨주고 반환값으로 초기화를한다.
CreateSubKey 메소드의 인자값은 "http://" 나 "ftp://" 처럼 프로토콜로 사용된다.
RegistryKey key = Registry.ClassesRoot.CreateSubKey("majg");
하지만 위의 소스코드를 그대로 실행시키게되면 액세스가 거부되었다는 예외가 발생하게된다.
이 문제를 해결하기위해서는 해당 프로젝트에 관리자권한을 부여해야되며, 아래의 게시글에서 자세히 설명한다.
프로젝트에 관리자 권한 부여하기
프로그래밍을 하다보면 가끔씩 프로젝트에 관리자 권한을 부여해야되는 경우가 있다. 이 게시글에서는 포로젝트에 관리자 권한을 부여하는 방법에대해 설명한다. 1. 솔루션 탐색기에서 프로젝�
majg.tistory.com
해당 프로젝트를 빌드하면 Windows의 레지스트리 편집기를 실행하여 자신이 등록한 인자값이 있는지 확인한다.
나는 majg 라는 이름의 레지스트리 키가 생성되었다.
위에서 생성한 RegistryKey 인스턴스에 URL Protocol 이라는 값을 생성하고, Key의 Value는 아무것도 넣지않는다.
key.setValue("URL Protocol", string.Empty);
이 소스코드를 실행시키면 레지스트리 편집기의 majg 레지스트리키에는 URL Protocol 이 추가된다.
이제 URL Scheme 를 통해 실행될 프로그램의 경로를 지정하기위해 새로운 키를 생성한다.
이때 CreateSubKey 메소드의 인자값으로 들어있는값은 다른값으로 대체할 수 없다.
key = key.CreateSubKey("shell").CreateSubKey("open").CreateSubKey("command");
여기까지 잘 따라왔다면 레지스트리 편집기에서 우리가 등록한 레지스트리의 계층은 아래 사진과 같을것이다.
이제 command 키에 값을 등록하는일만 남았다. 이 값은 실행할 프로그램의 경로가 된다.
경로는 command 키의 기본값에 넣어주어야되기때문에 SetValue 메소드의 첫번째 인자는 아무것도 넣지않는다.
key.SetValue(string.Empty, $"\"{AppDomain.CurrentDomain.BaseDirectory + AppDomain.CurrentDomain.FriendlyName}\" \"%1\"");
지금까지 한것을 실행시켜보면 command 키의 기본값은 이 프로그램의 경로가 지정될것이다.
우리가 등록한 레지스트리키를 웹브라우저에 입력해보면 다음과 같이 응용프로그램이 실행되는걸 확인할 수 있다.
지금까지 Custom Url Scheme 를 사용하여 웹에서 응용프로그램을 실행시키는 방법을 알아보았다.
아래에 전체 소스코드를 첨부한다.
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
RegistryKey key = Registry.ClassesRoot.CreateSubKey("majg");
key.SetValue("URL Protocol", string.Empty);
key = key.CreateSubKey("shell").CreateSubKey("open").CreateSubKey("command");
key.SetValue(string.Empty, $"\"{AppDomain.CurrentDomain.BaseDirectory + AppDomain.CurrentDomain.FriendlyName}\" \"%1\"");
}
}
}
'프로그래밍 > .NET' 카테고리의 다른 글
람다 (Lambda) (0) | 2020.12.11 |
---|---|
델리게이트 (Delegate) (0) | 2020.12.11 |
메서드 (Method) (0) | 2020.12.10 |
Startup Class (0) | 2020.11.29 |
프로젝트에 관리자 권한 부여하기 (0) | 2020.07.24 |