2017-02-24 74 views
-1

我想使用asp.net應用程序插入msi文件。當我在管理員模式下運行visual studio它工作正常,但是當我在正常模式下運行它不工作。 我曾嘗試下面的代碼:使用c安裝Msi文件#

string installerFilePath; 
installerFilePath = @"D:\ActivexPractice\test\test\NewFolder1\setup.msi"; 
System.Diagnostics.Process installerProcess = System.Diagnostics.Process.Start(installerFilePath, "/q"); 

任何機構可以指導我這個 如何安裝它沒有管理員權

+0

如果安裝需要管理員權限,您無權執行任何操作 –

+0

在創建msi文件時,我賦予了所有人權限,並且它擁有fullControl –

+1

MSI本身沒有任何權限。你可以賦予人們執行MSI_的權利,當然,MSI執行的_actions本身可能需要不同的權利。如果MSI中指定的安裝操作需要管理員權限,則運行MSI的用戶(或者在這種情況下運行C#代碼的用戶正在調用MSI)必須具有執行所有操作的必需權限。 – ADyson

回答

0

您可以使用msiexec.exe的運行安裝程序。這裏是示例代碼。

 Process installerProcess = new Process(); 
     ProcessStartInfo processInfo = new ProcessStartInfo(); 
     processInfo.Arguments = @"/i D:\ActivexPractice\test\test\NewFolder1\setup.msi /q"; 
     processInfo.FileName = "msiexec"; 
     installerProcess.StartInfo = processInfo; 
     installerProcess.Start(); 
     installerProcess.WaitForExit(); 
0

如果MSI需要管理員權限來安裝,那麼它會要求提升UI安裝。您的/ q失敗,因爲靜默安裝非常安靜,不會提示提升。請注意,有限的用戶不允許僅僅因爲他們正在進行安裝而破壞安全規則。

因此,在這種情況下,您的啓動過程需要提升,無論是以管理員身份運行還是給它一個RequireAdministrator清單,以便要求提升。

當您啓動安裝時,您需要確保您的提升狀態用於啓動安裝。保證這一點的最簡單方法是直接從代碼中調用(p/invoke to ...)MsiInstallProduct()。 Process.Start的問題在於默認情況下ProcessStartInfo.UseShellExecute爲true,並且您的提升狀態(如果有的話)將不會用於啓動安裝。安裝啓動時,它需要是CreateProcess類型的執行而不是ShellExecute類型,以便使用您的提升憑據。