使用DTF安装msi包

时间:2015-09-06 18:16:04

标签: wix windows-installer wix3.5 dtf msi-gui

我们正在尝试使用Microsoft.Deployment.WindowsInstaller dll(C#)并安装MSI包。我找不到很多这方面的例子。 安装成功。如果出现错误,我想使用lcid以特定语言显示错误消息。所以我使用下面的方法传递错误代码。使用的MSI有英语语言。

// Sample code for installing
        try
        {
            Installer.InstallProduct(@"Sample.msi", "ALLUSERS=1 ADDLOCAL=ALL");
        }
        catch (InstallCanceledException ex)
        {
            errorList.Add(ex.ErrorCode + " " + ex.Message);

        }
        catch (InstallerException ex)
        {
            errorList.Add("Exit Code: " + ex.ErrorCode + ", " + ex.Message);
            // Translate error message to different language
            // ex.GetErrorRecord is always null,so the below method doesn't work.
            string langError = Installer.GetErrorMessage(ex.GetErrorRecord(),System.Globalization.CultureInfo.GetCultureInfo(1031));
        }

我使用的方法对吗?请提供/指出我可以用特定语言获取正确错误消息的示例。

提前多多感谢。

2 个答案:

答案 0 :(得分:2)

您呼叫的API会从this list获取其消息,而不是this one

可以通过Win32Exception类访问将要获取您正在寻找的消息的API(我将其设为链接,但我还没有足够的分数,但我确信您可以找到该类),但由于你无法传递LCID,你需要改变你的线程文化,使用你的错误代码创建异常,然后恢复你的线程文化。

希望这有帮助

答案 1 :(得分:1)

您应该显示更多代码,以便我们可以看到您从哪里获得该错误,因此其中一些可能就是您已经在做的事情。

如果您使用Installer.InstallProduct,那么如果它失败,您将获得一个InstallerException,并且它已包含Message和ErrorCode。基本上你需要从(在所有东西下)调用MsiInstallProduct的结果,这是包括你的1603的列表:

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

但是您使用的错误消息函数在实际安装期间返回错误,其中包含“正在使用的文件”1603:

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

您可能已经完成了所有这些,如果是这样,那么您的问题可能是关于如何以适当的语言从InstallerException获取错误消息。因此,您可能需要调用GetErrorMessage重载,该重载使用InstallerException中的GetErrorRecord和文化信息作为参数。