在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() 

任何人都可以请让我知道什么是我做

错误
+0

*“我通过了管理员用户凭据执行命令之前,” * - 这是什么意思? – 2012-02-12 11:13:10

+0

正如您在try块中所看到的,我给出了Windows管理员用户名和密码 – Yoosuf 2012-02-12 11:15:32

+1

此代码包含大量编译错误。发布真实的代码,然后我们可以提供帮助。 – 2012-02-12 11:19:09

错误很可能是因为此代码:

Dim p As New ProcessInfo(regVersion.SetValue("Start", intVersion)) 

没有任何意义。 ProcessInfo constructor需要一个字符串,它指定了要启动的文件或应用程序的名称。您已通过RegistryKey.SetValue方法的结果,该方法不会返回值。

考虑要解决的是真正的问题,

我需要一直点击鼠标右键以管理员身份运行,它的工作

那么真正的解决办法是增加一个清单到您的应用程序,表明它应该以管理权限启动。这将使您不必右键单击并每次明确选择“以管理员身份运行”。相反,应用程序的进程将被自动提升(如果可能的话),否则UAC会提示您获得权限。

要在Visual Studio中为VB.NET应用程序执行此操作,您需要修改嵌入到应用程序中的默认清单。步骤如下:

  1. 右键单击解决方案资源管理器中的项目,然后选择“属性”。
  2. 打开“应用程序”选项卡。
  3. 点击“查看Windows设置”。
  4. 这将打开默认清单。将<requestedExecutionLevel>元素更改为requireAdministrator。 它应该是这样的:

    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
    
+0

那么与清单文件的问题是,它会使整个程序以管理员身份运行,我不想。是否有可能创建一个Manifest以仅以管理员权限运行此任务 – Yoosuf 2012-02-12 11:32:21

+1

@Yoosuf:否。高程仅适用于进程。提升运行特定“任务”的唯一方法是将其作为单独的进程运行,然后将清单添加到该进程的可执行文件中。使用'Process.Start'启动第二个可执行文件,然后以上述方式提示升级。 – 2012-02-12 11:34:20