通过进程的参数调用嵌入MSI

时间:2017-08-17 14:12:08

标签: c# wpf visual-studio-2012 windows-installer msiexec

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

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)创建的进程来运行进程加上相应的参数来安装他们通过菜单项选择的msi。我已将msi安装程序作为资源添加到我的Visual Studios 2012 WPF项目并将其设置为嵌入式。我已经测试了该过程并且它将工作,如果我将完整路径名放入安装程序,安装程序将使用命令和参数。我试图将安装程序包含在最终编译的EXE中,这样用户就不必拥有或下载安装驱动程序所需的文件,只需运行我的exe并点击安装即可安装驱动程序而无需将文件放入某个文件夹只运行exe和go。

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

感谢您提供的任何帮助。

tmitcham

1 个答案:

答案 0 :(得分:1)

您需要将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