授予应用程序在 Windows XP 中更改注册表的权限
本文关键字:注册表 权限 XP 应用程序 Windows | 更新日期: 2023-09-27 17:56:20
我的任何机器上都没有XP。 我努力让一个小应用程序在 Vista 和 Windows 7 中以管理员身份运行。 但是,我的一位测试人员报告说,在Windows XP上,他得到了以下异常:
System.UnauthorizedAccessException: Access to the registry key 'HKEY_CLASSES_ROOT'.ad2' is denied.
at Microsoft.Win32.RegistryKey.Win32Error(Int32 errorCode, String str)
我用来运行尝试写入注册表的应用程序的代码是:
var proc = new ProcessStartInfo {
UseShellExecute = true,
WorkingDirectory = Environment.CurrentDirectory,
FileName = Path.Combine(Application.StartupPath, "ADEFileAssociator.exe"),
Verb = "runas"
};
try {
Process.Start(proc);
}
catch {
MessageBox.Show("Failed to start File Associator", "Process Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
这对于打开 UAC 对话框的 Vista 和 Win7 来说效果很好。 如果用户同意运行,则会在这些版本上更新注册表。 我假设这同样适用于XP。 显然我错了。 所以我的问题是'我还需要做什么才能让我的应用程序写入XP中的注册表?
对于XP,您没有UAC,因此不能使用runas
动词。 相反,您能做的最好的事情就是设置 ProcessStartInfo
的UserName
和Password
属性。 这非常糟糕,因为您必须显示身份验证对话框或对值进行硬编码!
如果我处于你的位置,我会非常努力地寻找一种可以避免获得管理员权限的方法? 如果失败,那么我可能会将您的应用程序在XP上运行的先决条件作为用户具有管理员权限的先决条件。