Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Installer.InstallProduct引发异常_C#_Windows Installer_Installation - Fatal编程技术网

C# Installer.InstallProduct引发异常

C# Installer.InstallProduct引发异常,c#,windows-installer,installation,C#,Windows Installer,Installation,我试图通过代码安装MSI,我遇到了这个解决方案 代码: 我得到的异常有以下非描述性消息:{“InstallProduct,PackagePath,PropertyValues”} 我不知道这有什么意义。我也尝试过各种属性值的组合,但都没有用 有人能解释这个错误背后的原因吗 编辑 使用以下工程: System.Diagnostics.Process.Start("D:\\Applications\\TortoiseSVN-1.9.3.27038-x64-svn-1.9.3.msi"); 那么,

我试图通过代码安装MSI,我遇到了这个解决方案

代码:

我得到的异常有以下非描述性消息:{“InstallProduct,PackagePath,PropertyValues”}

我不知道这有什么意义。我也尝试过各种属性值的组合,但都没有用

有人能解释这个错误背后的原因吗

编辑

使用以下工程:

System.Diagnostics.Process.Start("D:\\Applications\\TortoiseSVN-1.9.3.27038-x64-svn-1.9.3.msi");

那么,这个方法和使用安装程序一样好吗?

IMO最简单的方法是调用DirectAPI MSInstallProduct并检查结果以了解发生了什么。P/Invoke签名很简单,您提到的文章到此结束

我看到的许多其他尝试的问题是引入了不必要的COM层。因此,除非环境是正确的(线程、单元和任何其他可能需要的),否则您可能会在COM层失败,并且失败会混淆MSInstallProduct将返回的简单错误(如您的情况)

仔细检查异常(可能是内部异常)可能会显示MSInstallProduct的HRESULT或整数结果,可能是此列表中的4位数字:

否则,请设置Windows Installer日志策略以创建详细日志:


在日志字符串中使用voicewarmupx,然后在%TEMP%中查找MSIxx.log文件。这假设您的环境没有导致问题。如果您是从本地系统帐户之类的地方运行代码,那么如果MSI尝试访问本地系统帐户的桌面之类的项目,则可能会失败。你需要那个日志来看看发生了什么。如果MSI文件没有UI并且需要提升,那么它不会要求提升,并且会失败。如果它有一个外部CAB文件,它可能找不到,然后失败。如果它是从映射的驱动器位置运行的,那么它也可能会失败。所以这不仅仅是关于代码,因为环境很重要。有许多故障点与编码无关

我只是注意到第一个代码的文件路径中没有“.msi”?是的,我错过了,但即使在路径中添加了“.msi”,我仍然得到了相同的异常。我从未使用安装程序API启动安装,也从未看到这方面的好处。我只是使用进程运行msi。按您的方式启动,但我建议使用:msiexec.exe/I@FurqanTariq您是否能够解决此问题?我偶然发现了同样的例外。
System.Diagnostics.Process.Start("D:\\Applications\\TortoiseSVN-1.9.3.27038-x64-svn-1.9.3.msi");