У меня есть программа updater exe, которая предназначена для закрытия первичного exe, заменяет его обновленным exe, а затем запускает этот обновленный exe. Когда программа обновления пытается запустить обновленный exe, если пользовательский диалог UAC запретит пользователю, программа обновления будет зависать. Это связано с тем, что функция Process.Start()
никогда не возвращается. Мой счетчик циклов процессора практически не использует btw.
Я бы надеялся, что все мои пользователи просто скажут "да" UAC, но поскольку я здесь, я бы хотел обработать этот случай с каким-то сообщением об ошибке. Предположим, что у моих пользователей будет по крайней мере Windows 7. Обычно exes - это 32-битные Winforms-приложения. Целевая .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, если вы не используете блок Try {} Catch {}, чтобы поймать ошибку.