본문 바로가기

C#

WebPage에서 컴퓨터에있는 exe파일 실행하기 #2

반응형

시간이 좀 지체되었지만, 요걸 하고 있는 과정 중에도 여러 가지 문제가 생겼다.

뜻밖의 얘기들을 납품 직전에 거래처에서 듣게 되었는데...

사용할 브라우저가 IE 가 아니라 Chrome이라고 한다..

어처구니없지만

또 해야하는게 우리 엔지니어의 숙명인지라 하는 수없이 또 고민을 하였기에 남겨본다.

 

레지스트리 너란녀석....

 

RegistryValueKind 열거형 (Microsoft.Win32)

레지스트리에 값을 저장할 때 사용할 데이터 형식을 지정하거나 레지스트리 값의 데이터 형식을 나타냅니다.Specifies the data types to use when storing values in the registry, or identifies the data type of a value in

docs.microsoft.com


우선 크롬으로 테스트할 html 페이지를 하나 만들어본다.

<!DOCTYPE html>
<html>
<head>
 <title>SampleSystem</title>
 <meta http-equiv="content-type" charset="shift-jis">
</head>
<style type="text/css"></style>
<script>

function execute(){
	var target1 = document.getElementsByName("param1")[0].value;
	var target2 = document.getElementsByName("param2")[0].value;
	var target3 = document.getElementsByName("param3")[0].value;
	var target4 = document.getElementsByName("param4")[0].value;
	var target5 = document.getElementsByName("param5")[0].value;

	var check1 = "0";	
	var check2 = "";	
	var check3 = "0";	
	var check4 = "";	
	var check5 = "";	
	for (var i = 0; i < document.Disconnection.DisconnectionFlag.length; i++) {
		if(i==0){
			if (document.Disconnection.DisconnectionFlag[i].checked) {
				check2 = "1";
			} else {
				check2 = "0";
			}
		}
		if(i==1){
			if (document.Disconnection.DisconnectionFlag[i].checked) {
				check5 = "1";
			} else {
				check5 = "0";
			}
		}
		if(i==2){
			if (document.Disconnection.DisconnectionFlag[i].checked) {
				check4 = "1";
			} else {
				check4 = "0";
			}
		}
	}

	var target6 = check1 + check2 + check3 + check4 + check5;

	location.href = "SampleSystem:" + "/" + target1 + "/" + target2 + "/" + target3 + "/" + target4 + "/" + target5 + "/" + target6;
}

</script>
<br>
SAMPLE
<form name="Disconnection" style="padding-left:20px">
  test input1 : <input type="text" name="param1" value="test"><p>
  test input2 : <input type="text" name="param2" value="sample"><p>
  test input3 : <input type="text" name="param3" value="092-1111-1111"><input type="checkbox" class="bigCheck" name="DisconnectionFlag" style="position:relative; top:5px;"><p>
  test input4 : <input type="text" name="param4" value="080-2222-2222"><input type="checkbox" class="bigCheck" name="DisconnectionFlag" style="position:relative; top:5px;"><p>
  test input5 : <input type="text" name="param5" value="050-3333-3333"><input type="checkbox" class="bigCheck" name="DisconnectionFlag" style="position:relative; top:5px;"><br>
</form>

<input type="button" name="summit" style="position:relative; left:20px; top:0px; height:50px; width:200px;" value="SampleSystemAction" onclick="execute()">

※필자는 이미 SampleSystem이라는 호출되는 대상의 프로그램이 존재하고 있습니다.

  호출될 대상의 프로그램은 초기에 실행될때에 args를 요구하고 있으며, "/"를 split 해서 사용할 예정입니다.

 

페이지를 작성하였으면 일단 그대로 한번 불러봅니다.

그러면 경고창이 나오면서 바로 실행은 되지 않는것을 볼 수 있을 것입니다.

이때에 필요한 것이 아래의 레지스트 제어입니다.

 

크롬을 제어하는경우

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome]
"ExternalProtocolDialogShowAlwaysOpenCheckbox"=dword:00000001

 

인터넷 익스플로러를 제어하는 경우

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\ProtocolExecute\samplesystem]
"WarnOnOpen"=dword:00000000

 

그리고 마지막으로 내 프로그램을 실행할때에 필요한 레지스트리 제어를 해주도록 한다.

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\SampleSystem]
@="URL:SampleSystem Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\SampleSystem\DefaultIcon]

[HKEY_CLASSES_ROOT\SampleSystem\shell]

[HKEY_CLASSES_ROOT\SampleSystem\shell\Open]

[HKEY_CLASSES_ROOT\SampleSystem\shell\Open\command]
@="\"C:\\Contact\\SampleSystem\\SampleSystem.exe\" \"%1\""

 

여기까지 하였다면 이제

처음에 만들었던 html 파일을 크롬 혹은 IE에서 실행해보자

 

대상프로그램이 실행 파라메터를 5개 요구하는 프로그램이 준비되어 있어서 저는5개를 보내도록 했습니다.

 

그리고 페이지 표시가 되었다면 버튼을 한번 눌러봅시다.

 

오오... 아무런 경고창없이 그대로 내 컴퓨터에 설치되어 있는, 프로그램이 실행되었습니다~

로컬PC에 설치해둔 프로그램을 웹에서 실행한 모습

 

레지스트리 제어파일의 배포는 인스톨러 작성시에 추가하실수 있으니 참고하세요.

 

 

 

반응형