簡體   English   中英

使用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));
        }

我使用的方法正確嗎? 請提供/指出我可以使用特定語言獲得正確錯誤消息的示例。

非常感謝。

您正在調用的API從此列表 (而不是 列表)獲取消息。

可以通過Win32Exception類訪問將獲取所需消息的API(我將其鏈接,但是我沒有足夠的積分,盡管我確定您可以找到該類),但是由於無法將其傳遞給LCID,因此您需要更改線程的區域性,使用錯誤代碼創建異常,然后還原線程的區域性。

希望這可以幫助

您應該顯示更多的代碼,以便我們可以看到從哪里得到該錯誤,所以其中某些可能是您已經在做的事情。

如果您使用Installer.InstallProduct,則如果InstallerException失敗,則會得到InstallerException,該異常已經包含Message和ErrorCode。 基本上,您需要從MsiInstallProduct調用(在所有內容下面)得到的結果,這是包括您的1603的列表:

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

但是您正在使用錯誤消息功能,該功能會在實際安裝過程中返回錯誤,其中包括“正在使用的文件” 1603:

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

您可能已經完成了所有這些操作,如果是這樣,那么您的問題可能是關於如何以適當的語言從InstallerException中獲取錯誤消息。 因此,也許您需要調用GetErrorMessage重載,該重載使用InstallerException中的GetErrorRecord和區域性信息作為參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM