Tôi có một exe cập nhật có nghĩa là đóng exe chính, thay thế nó bằng một exe đã cập nhật, và sau đó khởi chạy exe đã cập nhật đó. Khi trình cập nhật cố gắng khởi động bản cập nhật đã được cập nhật, nếu hộp thoại quyền UAC bị người dùng từ chối, trình cập nhật sẽ bị treo. Điều này là do hàm Process.Start()
không bao giờ trả về. Đồng hồ đo chu kỳ CPU của tôi cho thấy thực tế không sử dụng btw.Process.Start không bao giờ trả về khi UAC từ chối
Tôi hy vọng tất cả người dùng của tôi chỉ nói "có" với UAC, nhưng vì tôi ở đây tôi muốn xử lý trường hợp này với một số loại thông báo lỗi ít nhất. Giả sử người dùng của tôi sẽ có ít nhất Windows 7. Bản thân exes là các ứng dụng Winforms 32 bit. Nhắm mục tiêu .Net Framework là 4.0. Sử dụng Visual Studio 2010 Ultimate.
Bất kỳ ý tưởng nào về cách phát hiện khi người dùng của tôi từ chối hộp thoại UAC?
Tôi đoán tất cả những gì tôi có thể làm là làm cho Process.Start()
chạy trên một chuỗi riêng biệt sẽ hết thời gian chờ sau một thời gian. Đối với mã hơn:
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.");
}
Giải pháp:
Process.Start()
thoát âm thầm với một Win32Exception trừ khi có ai sử dụng một khối try {} catch {} để bắt lỗi.
Vui lòng nhập mã. –
Tôi giả sử (dựa trên những gì bạn đã nêu ở trên) mà bạn biết khi nào người dùng nhấp vào "Có" trên hộp thoại UAC, phải không? Nếu bạn biết điều này, tại sao không sử dụng [DialogResult Property] (http://msdn.microsoft.com/en-us/library/system.windows.forms.form.dialogresult (v = vs.110) .aspx) để xử lý trường hợp "Không"? – Brandon
Bạn đã thử dò tìm [Manifest] (http://msdn.microsoft.com/en-us/library/bb756929.aspx) chưa? Thậm chí không cung cấp cho người dùng cơ hội để nói số – tyh