none
[VS2005] 將程式包進 MSI 後, 在 Vista 64 的 OS 上執行有問題 RRS feed

  • 問題

  • Hi all,

    我在使用 VS2005 安裝專案, 將我們的程式封裝進 MSI 後, 在 Vista 64 OS 上遇到問題

    封裝步驟:
       1. 在檔案系統中加入我們自己開發的程式, ex: MyApp.exe
       2. 在自訂動作的安裝項目下加入 MyApp.exe
       3. 產生封裝檔, ex: MyApp.msi

    問題:
       在 Vista 64bit PC 上(已登入 Admin 帳號) 執行 MyApp.msi 時, MyApp.exe 中的部份功能無法執行
       例如: RegOpenKey, CreateFile....等

       如果將 MyApp.exe 直接 copy 到 Vista 64bit PC 上, 利用滑鼠右鍵點選 "Run as administrator"
       則該程式可以順利執行

       請問是我在封裝過成中少設了什麼參數嗎??
       例如要求 User 的 confirm 之類的
       或是 MyApp.exe 需要針對 Vista 64 做什麼特殊處理嗎??

    Note
       1. MyApp.msi 在 XP 32bit & Vista 32bit 上可以正常安裝 MyApp.exe, 也就是 MyApp.exe 所有
           功能一切正常
       2. MyApp.exe 是利用 WDK 在 64bit & Windows Server 2003 環境中 build 出來的


    不知道這個問題是否適合放在這個討論區
    如果不恰當, 煩請版大直接刪文

    感恩,
    Andrew
    2009年9月4日 上午 06:08

解答

  • Hi all,

    因為上禮拜都在開會, 所以沒來回覆

    後來經過測試修改, 我用 VS2005 包的 MSI Package 已經可以正常在 Vista 64 的系統上安裝了
    包含自訂動作中呼叫執行自己的 Tool 也可以正常 Work 了

    關鍵的地方在於單從 VS2005 來說是完全沒辦法解決 Vista64 上 UAC 的權限問題的
    必須利用 Orca Tool 來 Disable Package 中自訂動作的 Impersonate 屬性
    這樣在安裝時, Installer 就會允許自訂動作中的我們的 Tool 提升使用權限
    這樣 Tool 就能在安裝 MSI Package 過程中被正常的執行

    如果有 Disable 自訂動作的 Impersonate 屬性
    那麼自訂動作中的 Tool 就可以選擇不嵌入 Manifest
    不過為了安全起見, 我還是有嵌入相關資訊

    BR,
    Andrew
    • 已標示為解答 AndrewLiang 2009年9月14日 上午 06:49
    2009年9月14日 上午 06:49

所有回覆

  • 這是正常行為。
    因為 Vista 的 UAC 會擋住對系統資源的存取,就算你用的是 Administrator 也是一樣。

    Refer:
    http://msipackagingforvista.com/how-will-an-msi-deployment-handle-vista-uac-elevation.html
    http://technet.microsoft.com/en-us/library/cc709628(WS.10).aspx
    小人物一枚。
    2009年9月4日 上午 06:53
    版主
  • Hi 版大,

    根據兩篇 Link 的說明
    看來我需要幫我的 MyApp.exe 寫一個 Manifest file
    並在 Mainfest file 中說明需要 Execute or Admin level 的權限
    然後嵌入到 MyApp.exe 中

    請問是這個意思嗎??

    我已經動手在 try 了, 只是想再確認一下


    Thanks,
    Andrew
    2009年9月4日 上午 09:38
  • 你也可以在安裝指示中,要求使用者使用權限提升的方式來執行你的 MyApp.msi。
    小人物一枚。
    2009年9月4日 上午 10:14
    版主
  • Hi 版大,

    加入 Manifest 後, 我的 MyApp.exe 變成可以直接連點兩下執行了
    (原本不行)

    但是封裝進 MyApp.msi 後變成無法啟動安裝, 目前正在 study 安裝 fail 的 log


    另外請問如何在 VS2005 的安裝專案中要求使用者提升權限呢??
    我之前有看過一個 property: MSIUSEREALADMINDETECTION
    但是不知道如何使用


    Thanks,
    Andrew
    2009年9月4日 上午 11:27
  • Hi all,

    因為上禮拜都在開會, 所以沒來回覆

    後來經過測試修改, 我用 VS2005 包的 MSI Package 已經可以正常在 Vista 64 的系統上安裝了
    包含自訂動作中呼叫執行自己的 Tool 也可以正常 Work 了

    關鍵的地方在於單從 VS2005 來說是完全沒辦法解決 Vista64 上 UAC 的權限問題的
    必須利用 Orca Tool 來 Disable Package 中自訂動作的 Impersonate 屬性
    這樣在安裝時, Installer 就會允許自訂動作中的我們的 Tool 提升使用權限
    這樣 Tool 就能在安裝 MSI Package 過程中被正常的執行

    如果有 Disable 自訂動作的 Impersonate 屬性
    那麼自訂動作中的 Tool 就可以選擇不嵌入 Manifest
    不過為了安全起見, 我還是有嵌入相關資訊

    BR,
    Andrew
    • 已標示為解答 AndrewLiang 2009年9月14日 上午 06:49
    2009年9月14日 上午 06:49