通过进程参数调用 Embed MSI

Calling an Embed MSI thru argument of process

我想做的是将我们公司使用的某些扫描仪的 msi 安装程序嵌入到一个帮助台界面中,该界面允许用户 select 他们想要的扫描仪并单击一个按钮来安装驱动程序。

private void MSIexec(string arguments)//Run MSIexec = MSIexec("Enter Command");
    {

        Process process = new Process();
        process.StartInfo.FileName = @"C:\Windows\System32\msiexec.exe";
        process.StartInfo.Arguments = arguments;
        process.Start();

这是我使用命令 MSIexec(Argument Here)创建的进程 运行 该进程加上相应的参数以通过菜单项 select 安装 msi。我已将 msi 安装程序作为资源添加到我的 Visual Studios 2012 WPF 项目并将其设置为嵌入式。我已经测试了这个过程,它会工作,如果我输入安装程序的完整路径名,安装程序将使用命令和参数。我正在尝试将安装程序包含在最终编译的 EXE 中,这样用户就不必拥有或下载安装驱动程序所需的文件,他们只需 运行 我的 exe 并单击安装即可安装驱动程序,而无需他们在某个文件夹中有文件只是 运行 exe and go.

主要问题是我可以通过参数调用嵌入的 msi 还是需要将它加载到其他地方才能通过参数调用。此外,当事情 运行 通过测试或一旦 exe 准备就绪时,程序会将这些文件存储在 (C:\Temp) 中的什么文件????如果这是正确的文件夹,也许我可以在参数中引用它,这样我知道安装程序上的路径不会改变。

感谢您提供的任何帮助。

tmitcham

您需要将 MSI 文件从可执行文件的资源中提取到某个安全位置,然后从那里启动 MSI 安装。会是这样的:

https://www.codeproject.com/Articles/4221/Adding-and-extracting-binary-resources

How can I self-extract a binary resource (executable) using C++?

它必须存放在安全的地方,因为在维修或其他此类维护操作时可能需要它,因此不应丢弃它。

我不会打扰 msiexec.exe 电话。有一个非常好的 API MsiInstallProduct() 很容易 P/Invoke 到。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa370315(v=vs.85).aspx

http://www.pinvoke.net/default.aspx/msi.msiinstallproduct