我们正在尝试使用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));
}
我使用的方法对吗?请提供/指出我可以用特定语言获取正确错误消息的示例。
提前多多感谢。
答案 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和文化信息作为参数。