我有一个更新程序 exe,旨在关闭主 exe,将其替换为更新的 exe,然后启动该更新的 exe。当更新程序尝试启动更新的 exe 时,如果用户拒绝 UAC 权限对话框,更新程序将挂起。这是因为Process.Start()
函数永远不会返回。顺便说一句,我的 CPU 周期表显示几乎没有使用。
我希望我的所有用户都对 UAC 说“是”,但既然我在这里,我想至少用某种错误消息来处理这种情况。假设我的用户至少拥有 Windows 7。exe 本身是 32 位 Winforms 应用程序。目标 .Net Framework 是 4.0。使用 Visual Studio 2010 旗舰版。
关于如何检测我的用户拒绝 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()
除非使用 Try{}Catch{} 块来捕获错误,否则会以 Win32Exception 静默退出。
Process newProc = Process.Start(startInfo);
MessageBox.Show("If this shows, the user has clicked YES in the UAC.");
这是正常的,由 Process.Start() 引发的异常将绕过 MessageBox.Show() 调用。它是 Windows 的 Win32Exception 错误代码 1223、ERROR_CANCELLED、“操作已被用户取消”。
显然你会想避免在这里吞掉异常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)