授予应用程序在 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中的注册表?

授予应用程序在 Windows XP 中更改注册表的权限

对于XP,您没有UAC,因此不能使用runas动词。 相反,您能做的最好的事情就是设置 ProcessStartInfoUserNamePassword属性。 这非常糟糕,因为您必须显示身份验证对话框或对值进行硬编码!

如果我处于你的位置,我会非常努力地寻找一种可以避免获得管理员权限的方法? 如果失败,那么我可能会将您的应用程序在XP上运行的先决条件作为用户具有管理员权限的先决条件。