VB.NET - 写入Registry时拒绝访问

时间:2012-12-04 16:12:32

标签: vb.net

我正在使用以下代码来运行写入注册表的程序

Dim myProcess2 As New System.Diagnostics.Process()
            Dim startInfo2 As New ProcessStartInfo
            startInfo2.FileName = Application.StartupPath & "\installs\Assistant\RegisterSureFire.exe"
            startInfo2.Verb = "runas"
            myProcess2.StartInfo = startInfo2
            Application.DoEvents()
            myProcess2.Start()

然后我有另一个名为“RegisterSureFire”的文件正在运行,实际上使用以下代码写入注册表:

 My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", "Assistant", "C:\SF\Assistant.exe")

这似乎在Windows Vista / 7/8中使用“runas”为管理员完美地运行,但是当你在Windows XP中执行此操作时,会出现该框,询问您是否要在当前用户或管理员中运行它。我的大多数客户都在50-70岁左右,所以他们不知道这是什么。另外我注意到,如果我只是在Windows XP上使用“runas”,那么我在尝试写入注册表时会收到“拒绝访问”错误消息。

有人可以给我正确的书面建议吗?

1 个答案:

答案 0 :(得分:0)

我认为您的代码确实是正确的,但您的应用程序需要修改注册表的权限。这可以在用户模仿的Windows XP下实现。

请谷歌找到符合您需求的解决方案,或者在这里查看这篇好文章: http://www.codeproject.com/Articles/21050/Security-User-Impersonation