2014-02-20 1 views
0

파일이 MyUtilities.exe입니다.코드와 실행 가능한 호환성 변경

나는 실행하면 : 그것은 관리자 권한없이 실행되는 경우 Process.Start("MyUtilities.exe","SomeParameter");

해당 프로세스의 종료 코드가 0 (OK)이다. 이 코드를 관리자 권한으로 실행하면 종료 코드는 1입니다!

나는 MyUtilities.exe을 만들지 않았으므로 수정할 수 없습니다.

enter image description here

: 내가 관리자로 Process.Start("MyUtilities.exe","SomeParameter");를 실행해야합니다 그리고 그것은 종료 코드를 반환해야 결국

= 0 내가 그렇게 관리하는 방법에 호환성을 변경했다 (파일 -> 등록 정보 -> 호환성 ->이 프로그램을 관리자 권한으로 실행)

변경 후 관리자로 Process.Start("MyUtilities.exe","SomeParameter");을 실행할 수 있습니다. 그래서 제 질문은 그때의 설정을 변경할 파일을 클릭 오른쪽으로 사용자에게 할 필요가 없도록 내가 코드로 해당 파일 의 호환성을 변경하는 방법을은 0

의 종료 코드를 반환 .

+0

여기에있는 내용은 무엇입니까? http://stackoverflow.com/questions/2532769/how-to-start-a-process-as-administrator-mode-in-c-sharp – Crono

+1

MyUtilities.exe를 직접 호출해야합니까? MyUtilities.exe를 호출하는 MyUtilitiesStarter.exe를 호출하는 옵션이 있습니까? – Linky

+0

나는 이해하지 못한다. 다른 프로세스를 상승 또는 상승시키지 않으시겠습니까? –

답변

6

매우 간단 해 보입니다. 레지스트리에 값을 추가하기 만하면됩니다.

키 : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers - 또는 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

이름 : f:\ull\path\to\executable.exe

값 : RUNASADMIN

여기 당신이 코드에서 이런 짓을 했을까 방법입니다. HKCU에 쓰는 경우, 호출 프로세스는 관리자로 실행될 필요가 없습니다.

static void SetRunAsAdmin(string exeFilePath) 
{ 
    var key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers", true); 
    if (key == null) 
     throw new InvalidOperationException(@"Cannot open registry key HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers."); 
    using (key) 
     key.SetValue(exeFilePath, "RUNASADMIN"); 
} 
+0

OP는 코드 *에서이를 수행하는 방법을 물었다. – Crono

+1

OP가 프로그래밍 방식으로 레지스트리에 쓸 수 없다면 그는 자신의 머리를 쓰고 있습니다. :) –

+0

그건 요점이 아니야. 이 프로세스는 레지스트리에 쓸 수 있지만 외부 프로세스가 실행되도록 허용하지 않는 보안 컨텍스트에서 실행될 수 있습니다 ("관리자 blabla로 실행 하시겠습니까?"대화 상자가 나타납니다). – Crono

관련 문제