2014-04-28 11 views
12

Mam program aktualizujący, który ma na celu zamknięcie podstawowego exe, zastąpienie go zaktualizowanym plikiem EXE, a następnie uruchomienie zaktualizowanego pliku exe. Gdy program Updater podejmuje próbę uruchomienia zaktualizowanego pliku exe, jeśli okno dialogowe uprawnień użytkownika UAC zostanie odrzucone przez użytkownika, narzędzie do aktualizacji zostanie zawieszone. Dzieje się tak, ponieważ funkcja Process.Start() nigdy nie wraca. Mój licznik cykli procesora wskazuje praktycznie na brak użycia btw.Process.Start nigdy nie wraca, gdy UAC odmówiono

Mam nadzieję, że wszyscy moi użytkownicy po prostu powiedzą "tak" ZAK, ale skoro już tu jestem, chciałbym poradzić sobie z tą sprawą z co najmniej jednym komunikatem o błędzie. Załóżmy, że moi użytkownicy będą mieć przynajmniej Windows 7. Sami exe są 32-bitowymi aplikacjami WinForm. Docelowy .Net Framework to 4.0. Korzystanie z Visual Studio 2010 Ultimate.

Jakieś pomysły dotyczące wykrywania, gdy mój użytkownik odrzuca okno dialogowe kontroli konta użytkownika?

Zgaduję, że jedyne, co mogę zrobić, to sprawić, że Process.Start() będzie działał na osobnym wątku, który po jakimś czasie przestanie działać. Aby uzyskać więcej kodu:

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."); 
} 

Rozwiązanie:

Process.Start() wychodzi cicho z Win32Exception chyba jeden używa try {} catch {} blok złapać błąd.

+1

Więcej kodu. –

+0

Zakładam (na podstawie tego, co wskazałeś powyżej), że wiesz, kiedy użytkownik kliknie "Tak" w oknie dialogowym Kontrola konta użytkownika, prawda? Jeśli wiesz, dlaczego nie skorzystać z [właściwości DialogResult] (http://msdn.microsoft.com/en-us/library/system.windows.forms.form.dialogresult (v = vs.110) .aspx) na obsłużyć przypadek "Nie"? – Brandon

+0

Czy próbowałeś majstrować przy [Manifestu] (http://msdn.microsoft.com/en-us/library/bb756929.aspx)? Nie daj nawet użytkownikom szansy na powiedzenie Nie. – tyh

Odpowiedz

7

Jest to normalne, wyjątek podniesiony przez Process.Start() obejdzie wywołanie MessageBox.Show(). Jest to kod błędu Win32Exception for Windows 1223, ERROR_CANCELLED, "Operacja została anulowana przez użytkownika".

Najwyraźniej będziesz chciał uniknąć wyjątków od przełknięcia tutaj.

+0

Perfect. Wszystko, co było wymagane, to prosta próba catch catch. Dziękuję, panie Passant. –

Powiązane problemy