使用c#安装Msi文件

时间:2017-02-24 13:42:26

标签: c# asp.net windows-installer

我正在尝试使用asp.net应用程序插入msi文件。当我在管理员模式下运行visual studio它工作正常,但是当我在正常模式下运行它时,它无法正常工作。 我曾尝试过以下代码:

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

任何人都可以指导我 没有管理员的权利如何安装

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

如果MSI需要管理员权限才能安装,那么它将要求在UI安装中提升。您的/ q失败,因为静默安装确实是静默的,不会提示提升。请注意,限制用户不能仅仅因为他们正在进行安装而破坏安全规则。

因此,在这种情况下,您需要提升启动过程,无论是以管理员身份运行还是向其提供requiresAdministrator清单,以便它要求提升。

当您启动安装时,您需要确保使用提升状态来启动安装。保证这一点的最简单方法是直接从代码中调用(p / invoke to ...)MsiInstallProduct()。 Process.Start的问题是默认情况下ProcessStartInfo.UseShellExecute为true,并且您的提升状态(如果有的话)将不会用于启动安装。启动安装时,它需要是CreateProcess类型的执行而不是ShellExecute类型,以便使用提升的凭据。

答案 2 :(得分:0)

private void installMSI(字符串路径) { string[] allFiles = Directory.GetFiles(path, "*.msi");

<uses-permission android:name="android.permission.VIBRATE"/>