使用 DTF 安装 msi 包
Using DTF to install msi package
我们正在尝试使用 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));
}
我用的方法对吗?请提供/指出示例,我可以在其中以特定语言获得正确的错误消息。
非常感谢。
您应该展示更多代码,以便我们了解您从哪里得到错误,所以其中一些可能是您已经在做的。
如果您使用 Installer.InstallProduct,那么如果它失败,您会得到一个 InstallerException,并且已经包含一个消息和一个错误代码。基本上,您需要(在所有内容之下)调用 MsiInstallProduct 的结果,这是包括您的 1603 的列表:
https://msdn.microsoft.com/en-us/library/aa368542(v=vs.85).aspx
但是您正在使用 returns 在实际安装过程中出错的错误消息功能,其中包括 "file in use" 1603:
https://msdn.microsoft.com/en-us/library/aa372835(v=vs.85).aspx
您可能已经完成了所有这些操作,如果是这样,那么您的问题可能是关于如何以适当的语言从 InstallerException 中获取错误消息。因此,您可能需要调用 GetErrorMessage 重载,它使用 InstallerException 中的 GetErrorRecord 和文化信息作为参数。
您正在呼叫的 API 从 this list, not this one 获取消息。
API 可以通过 Win32Exception class 访问您正在寻找的消息(我将其设为 link,但我没有积分还不够,尽管我确定您可以找到 class),但由于您无法将 LCID 传递给它,因此您需要更改线程的区域性,使用错误代码创建异常,然后还原您的主题文化。
希望对您有所帮助
我们正在尝试使用 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));
}
我用的方法对吗?请提供/指出示例,我可以在其中以特定语言获得正确的错误消息。
非常感谢。
您应该展示更多代码,以便我们了解您从哪里得到错误,所以其中一些可能是您已经在做的。
如果您使用 Installer.InstallProduct,那么如果它失败,您会得到一个 InstallerException,并且已经包含一个消息和一个错误代码。基本上,您需要(在所有内容之下)调用 MsiInstallProduct 的结果,这是包括您的 1603 的列表:
https://msdn.microsoft.com/en-us/library/aa368542(v=vs.85).aspx
但是您正在使用 returns 在实际安装过程中出错的错误消息功能,其中包括 "file in use" 1603:
https://msdn.microsoft.com/en-us/library/aa372835(v=vs.85).aspx
您可能已经完成了所有这些操作,如果是这样,那么您的问题可能是关于如何以适当的语言从 InstallerException 中获取错误消息。因此,您可能需要调用 GetErrorMessage 重载,它使用 InstallerException 中的 GetErrorRecord 和文化信息作为参数。
您正在呼叫的 API 从 this list, not this one 获取消息。
API 可以通过 Win32Exception class 访问您正在寻找的消息(我将其设为 link,但我没有积分还不够,尽管我确定您可以找到 class),但由于您无法将 LCID 传递给它,因此您需要更改线程的区域性,使用错误代码创建异常,然后还原您的主题文化。
希望对您有所帮助