2010-04-26 74 views
1

通過我的桌面應用程序的安裝程序(C#代碼),我想執行一個外部進程。我這樣做使用下面的代碼。從System.Diagnostics.Process.Start()方法啓動的進程訪問註冊表項

  ProcessStartInfo sinfo = new ProcessStartInfo(); 
      sinfo.FileName = filePath; 
      sinfo.WorkingDirectory = workingDir; 
      sinfo.UseShellExecute = false; 
      using (Process proc = Process.Start(sinfo)) 
      { 
       proc.WaitForExit(); 
       int code = proc.ExitCode; 
      } 

我的外部進程基本上是試圖讀取一個註冊表項並用它來處理(它只讀,不寫入reg)。

雖然我確認註冊表項值已被安裝程序更新(我可以通過註冊表手動讀取註冊表項),但外部進程無法讀取這些值。它試圖如下:

   using (RegistryKey rk = Registry.CurrentUser.OpenSubKey(regKey)) 
       { 
        return (string)rk.GetValue(subKey); 
       } 

當我把一個斷點在上面的紋路,我看到RK其內部具有無子項。我在Win7環境下做了所有這些(不知道UAC是否引起麻煩)

現在,當我手動直接運行外部應用程序(即雙擊應用程序的exe)時,我能夠讀取註冊條目容易。好像我在開始這個過程時做錯了什麼。任何人有什麼想法是什麼?

感謝, 卡皮爾

回答

0

你可能有一個訪問問題。

嘗試填寫sinfo.username和sinfo.password屬性,並確保有管理訪問權限的用戶啓動過程

ProcessStartInfo sinfo = new ProcessStartInfo(); 
     sinfo.FileName = filePath; 
     sinfo.WorkingDirectory = workingDir; 
     sinfo.UseShellExecute = false; 
     sinfo.UserName = "username1"; 
     SecureString password = new SecureString(); 
     foreach (char c in "password1".ToCharArray()) { 
      password.AppendChar(c); 
     } 
     sinfo.Password = password; 
     using (Process proc = Process.Start(sinfo)) 
     { 
      proc.WaitForExit(); 
      int code = proc.ExitCode; 
     } 
+0

感謝您的回答馬丁。但是我怎麼填寫用戶名和密碼屬性。有沒有任何Windows API獲取當前用戶的用戶名和密碼?我非常懷疑。 – Kapil 2010-04-30 22:35:25