2012-02-12 119 views
0

我使用了必要的代碼來改變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

回答

2

錯誤很可能是因爲此代碼:

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