2011-02-15 64 views
2

這是一個問題,我一直在爭取幾天,現在我的智慧結束了。我正在用Wise Installation Studio創建一個MSI,但我敢打賭它可能會被任何MSI創作程序所斥責。我爲那些希望複製我發佈的MSI,DLL或WSI文件的人創建了一個測試示例。無法將自定義操作的MSI安裝到非管理員用戶名中包含非ascii字符

  1. 創建一個新的解決方案睿智,保存爲「test.wsi」和創建「test.msi」
  2. 沒有做對這個文件除了在「UI序列」的MigrateFeaturesState動作後添加兩個自定義操作
  3. 第一個自定義操作是「從安裝調用DLL」,它不傳遞任何參數並忽略返回碼
  4. 第二個自定義操作是「從調用自定義的DLL」,它不傳入任何參數並忽略返回代碼
  5. 這兩個操作都引用相同的DLL和相同的函數,這只是顯示「的HelloWorld」消息框

預期結果helloworld.dll和的HelloWorld()函數: 兩個世界你好提示,然後定期UI屏幕開始安裝過程。

這裏是我的當前設置: 發展箱: - 智者安裝工作室7.4.0.214 - 與UAC運行Win7的X64關閉,

試驗箱: - 的Windows XP SP3 - Windows安裝程序V4。 5.6001.22159 - .Net框架V4.0

這裏是我的測試案例:

  1. 非管理員用ASCII用戶吶我的結果與'ALLUSERS ='「'和ALLUSERS =」1「的預期一樣
  2. 管理員名稱爲'あくぇえ'的unicode字符 - 結果與'ALLUSERS ='」'和ALLUSERS = 「1」
  3. 非管理員名稱中包含unicode字符'發澀' - 僅顯示第一個提示,並且第二個顯示錯誤如下: 「自定義操作中出錯。庫C:\ Documents and Settings \ [LongAlphaNumericString] .TMP \ WiseCustomCalla.dll無效或無法找到。「 這會爲'ALLUSERS ='」'和ALLUSERS =「1」發生
  4. 登錄與另一個管理員和#3用戶設置爲管理員,再次登錄用戶#3,我們得到預期的結果。

我試着亂搞周圍強迫短路徑和傳遞在替代路徑用戶數據文件夾但沒有任何作用任何人都知道爲什麼會發生這種情況以及如何解決這個問題? 我已經包含了用於此測試的所有文件,其中包括錯誤消息的屏幕截圖,msi和msi.xml ,wsi文件,helloworld.dll(使用rundll32 helloworld.dll,HellowW進行測試orld)以及上面每個測試用例的日誌。

http://dl.dropbox.com/u/1797288/error.zip

什麼需要在MSI/WSI文件,以便#3作品正確的'調用自定義DLL從安裝的行動是否會改變?

感謝, 亞倫P

回答

0

我認爲這個問題是由這些DLL的處理方式造成的。來自安裝的DLL存儲在二進制表中,並在安裝過程中自動提取。它是原生的,所以它按預期工作。

從安裝中調用自定義DLL很可能在安裝期間使用不正確的路徑來提取DLL。它可能是每個機器的位置,非管理員用戶無法訪問。

嘗試使用支持Unicode字符的代碼頁構建MSI(可以設置MSI語言)。另外,請嘗試創建日誌併發布實際的DLL路徑。

+0

MSI的代碼頁不太可能有所幫助。這些操作必須工作的方式是由一個輔助操作(由Wise提供)來提取您的dll,然後使用與Windows Installer約定不同的約定來調用它。不幸的是,它看起來這個膠水DLL是內置的ANSI,無法處理當前TEMP路徑上的非ANSI字符。唯一可能的解決方案是重新實現你的DLL作爲Windows Installer兼容的DLL,所以膠水DLL是不必要的。 – 2011-02-15 14:21:51

相關問題