2014-04-28 4 views
12

기본 exe를 닫고 업데이트 된 exe로 바꾸고 업데이트 된 exe를 시작하기위한 updater exe를 가지고 있습니다. 업데이트 프로그램이 업데이트 된 exe를 시작하려고 시도 할 때 사용자가 UAC 권한 대화 상자를 거부하면 업데이터가 중지됩니다. 이는 Process.Start() 함수가 결코 반환하지 않기 때문입니다. 내 CPU주기 미터는 실제적으로 사용량 btw가 없음을 나타냅니다.UAC가 거부되었을 때 Process.Start는 결코 돌아 오지 않습니다.

나는 모든 사용자가 UAC에 "예"라고 말하기를 바랄 것이다. 그러나 나는이 사건을 적어도 몇 가지 오류 메시지로 처리하고 싶다. 내 사용자가 Windows 7 이상을 사용한다고 가정합니다. exe는 32 비트 Winform 응용 프로그램입니다. 대상 .Net Framework는 4.0입니다. Visual Studio 2010 Ultimate 사용.

내 사용자가 UAC 대화 상자를 거부하는 경우를 감지하는 방법에 대한 아이디어가 있습니까?

내가 할 수있는 일은 Process.Start()을 잠시 후에 시간 초과되는 별도의 스레드에서 실행하는 것입니다. 더 많은 코드의 경우 :

private void RestartProcess() 
{ 
    ProcessStartInfo startInfo = new ProcessStartInfo(); 
    startInfo.FileName = @"C:\Users\Me\Documents\Visual Studio 2010\Projects\updated.exe"; 
    MessageBox.Show("Attempting to start process"); 
    Process newProc = Process.Start(startInfo); 
    MessageBox.Show("If this shows, the user has clicked YES in the UAC."); 
} 

솔루션 :

Process.Start() 종료 묵묵히 Win32Exception 하나의 오류를 잡으려고 시도 {} 잡기 {} 블록을 사용하지 않는.

+1

기타 코드를 작성하십시오. –

+0

사용자가 UAC 대화 상자에서 "예"를 클릭 할 때 알고 있다고 가정합니다 (위의 내용을 기반으로). 이 사실을 알고 있다면 [DialogResult Property] (http://msdn.microsoft.com/en-us/library/system.windows.forms.form.dialogresult (v = vs.110) .aspx)를 사용하여 "아니오"의 경우를 처리합니까? – Brandon

+0

[Manifest] (http://msdn.microsoft.com/en-us/library/bb756929.aspx)로 조작 해 보았습니까? 사용자에게 No라고 말하기조차하지 마십시오. – tyh

답변

7
Process newProc = Process.Start(startInfo); 
    MessageBox.Show("If this shows, the user has clicked YES in the UAC."); 

Process.Start()에서 발생한 예외는 MessageBox.Show() 호출을 무시합니다. Windows 오류 코드 1223에 대해 Win32Exception입니다 (ERROR_CANCELLED, "작업이 사용자에 의해 취소되었습니다").

분명히 여기에 예외를 삼가는 것이 좋습니다.

+0

Perfect. 필요한 모든 것은 간단한 try catch 문이었습니다. 고마워요, Passant 씨. –

관련 문제