在VB.NET中编辑注册表
我使用了必要的代码来改变VB.NET中注册表的DWord,但是我需要始终右键单击并以管理员身份运行以使其工作。为了防止这种情况,我在执行该命令之前传递了管理员用户凭据,但是我收到了一条错误消息。在VB.NET中编辑注册表
我用于此目的的代码,
Dim regVersion As RegistryKey
regVersion = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\services\\USBSTOR", True)
Try
Dim intVersion As Integer = 4
intVersion = regVersion.GetValue("Start", 0)
intVersion = intVersion + 1
End If
Dim p As New ProcessInfo(regVersion.SetValue("Start", intVersion))
p.UseShellExecute = False
p.Domain = "domain"
p.UserName = "Yoosuf"
p.Password = New System.Security.SecureString()
Dim q As New System.Security.SecureString()
For Each c As Char In
q.Password.AppendChar(c)
Next
Process.Start(p)
regVersion.Close()
Catch es As Exception
End Try
但是我收到就行了一条错误消息
Dim p As New ProcessInfo()
任何人都可以请让我知道什么是我做
错误
错误很可能是因为此代码:
Dim p As New ProcessInfo(regVersion.SetValue("Start", intVersion))
没有任何意义。 ProcessInfo
constructor需要一个字符串,它指定了要启动的文件或应用程序的名称。您已通过RegistryKey.SetValue
方法的结果,该方法不会返回值。
考虑要解决的是真正的问题,
我需要一直点击鼠标右键以管理员身份运行,它的工作
那么真正的解决办法是增加一个清单到您的应用程序,表明它应该以管理权限启动。这将使您不必右键单击并每次明确选择“以管理员身份运行”。相反,应用程序的进程将被自动提升(如果可能的话),否则UAC会提示您获得权限。
要在Visual Studio中为VB.NET应用程序执行此操作,您需要修改嵌入到应用程序中的默认清单。步骤如下:
- 右键单击解决方案资源管理器中的项目,然后选择“属性”。
- 打开“应用程序”选项卡。
- 点击“查看Windows设置”。
-
这将打开默认清单。将
<requestedExecutionLevel>
元素更改为requireAdministrator
。 它应该是这样的:<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
那么与清单文件的问题是,它会使整个程序以管理员身份运行,我不想。是否有可能创建一个Manifest以仅以管理员权限运行此任务 – Yoosuf 2012-02-12 11:32:21
@Yoosuf:否。高程仅适用于进程。提升运行特定“任务”的唯一方法是将其作为单独的进程运行,然后将清单添加到该进程的可执行文件中。使用'Process.Start'启动第二个可执行文件,然后以上述方式提示升级。 – 2012-02-12 11:34:20
*“我通过了管理员用户凭据执行命令之前,” * - 这是什么意思? – 2012-02-12 11:13:10
正如您在try块中所看到的,我给出了Windows管理员用户名和密码 – Yoosuf 2012-02-12 11:15:32
此代码包含大量编译错误。发布真实的代码,然后我们可以提供帮助。 – 2012-02-12 11:19:09