2012-01-04 153 views
11

我們現在擁有與WiX 3.5創建的MSI。該應用程序在.NET 3.5中。我們在MSBuild文件中使用boostrapper任務生成引導程序。它指向6.0a SDK文件。如何使用WiX安裝程序以提升的權限進行安裝?

當用戶有UAC並且他們安裝時,他們必須右鍵單擊setup.exe並選擇運行管理員。

我真正想要的是讓setup.exe自動提示升級(使用我在其他安裝中看到的黃色對話框)。

更重要的是,我希望MSI能夠做到這一點,並完全消除setup.exe,但我認爲這就是WiX 3.6的意義所在,對吧?

如果我使用ApplicationRequiresElevation="true"創建了boostrapper,那麼這個requries 7.0a SDK是正確的?引導程序會提示自動提升嗎?這是否意味着應用程序必須是一個.NET 4應用程序?我不這麼認爲......

回答

13

我們使用了WiX 3.0,並且能夠提升權限。但是,我們沒有提升我們的引導程序。我們提高了MSI文件本身,通過封裝屬性:

<Package Id="$(var.PackageCode)" 
     Description="$(var.ProductName) $(var.Version)" 
     InstallerVersion="301" 
     Compressed="yes" 
     InstallPrivileges="elevated" <!-- Elevated right here --> 
     InstallScope="perMachine" 
     Platform="x86"/> 

作爲一個側面說明,我們的引導程序進行簽名(使用從v6.0A SDK signtool.exe)與我們的官方證書。我不確定這是否會導致引導程序也需要提升權限。

UPDATE:

我們已經得到了需要以管理員級別要運行的可執行文件在我們的setup.exe引導程序項目的app.manifest文件。看到下面的例子:

<?xml version="1.0" encoding="utf-8"?> 
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" 
       xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" 
       xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
     <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
     <!-- UAC Manifest Options 
      If you want to change the Windows User Account Control level replace 
      the requestedExecutionLevel node with one of the following. 

     <requestedExecutionLevel level="asInvoker" uiAccess="false" /> 
     <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
     <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> 

      If you want to utilize File and Registry Virtualization for backward 
      compatibility then delete the requestedExecutionLevel node. 
     --> 
     <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</asmv1:assembly> 
+0

謝謝,我已經有這樣設置InstallPrivleges但它似乎沒有做任何有用的。直接運行MSI將無法提升。哦,但我只注意到InstallerVersion設置爲300.我不知道這是不是... – Jonesie 2012-01-04 03:26:31

+0

@Jonesie:如果在明天之前你沒有得到一個好的答案,我會仔細看看我們的東西,當我在工作。我可能會挖掘更多的信息。 – 2012-01-04 03:33:34

+0

乾杯隊友!我需要通過我們的構建服務器運行這需要一個小時,所以這是相當緩慢,一次嘗試1件事情:) – Jonesie 2012-01-04 03:40:18

0

我知道這是一個老話題,但可能會節省一些時間,下一個。
我不得不閱讀所有評論,尤其是custom action had Impersonate=yes...

在另一方面自定義操作已執行與特權屬性:

<CustomAction Id = "CA.First" Execute ="immediate" ... /> 
<CustomAction Id = "CA.Second" Execute ="deferred" ... /> 

CA.First將在用戶模式下總是被執行,但CA.Second可以擁有更高權限。

可能在這裏是與權限有關的其他技巧,
要點在這裏 - WiX允許CustomAction級別的控制權限,因此請確保設置正確。

CustomAction Element