2012-07-16 97 views
8

我有一個VS2010解決方案,其中包含2個項目 - 一個.NET 4程序和一個安裝程序。安裝程序只是一個帶有必備條件的簡單安裝項目 - .NET Framework 4.VS2010安裝項目 - 以管理員身份運行

問題是我需要安裝程序setup.exe才能始終以管理員身份運行,否則安裝將在UAC下失敗。 (它不提示我的默認權限提升。)

我試圖把一個setup.exe.manifest(如下圖所示)旁邊的setup.exe以迫使它以管理員身份運行,但不幸的是Windows將忽略它,很可能是因爲已經有另一個清單文件嵌入setup.exe本身,並且它被設置爲asInvoker而不是requireAdministrator

<?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"> 
     <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</asmv1:assembly> 

我也嘗試添加一個啓動條件具有以下屬性: -

(name): Elevated 
Condition: Privileged 
Message: This installation requires elevated permissions to continue. 

這並不做任何事情無論是。

所以任何人都可以請闡明如何解決這個問題?

P.S.我知道您可以通過更改setup.exe的兼容性設置來解決此問題,但這是手動過程,無法通過自動構建過程(TFS)完成。另外,提供兼容性設置的快捷方式也很奇怪,因爲沒有人在同一個文件夾中提供setup.exe的快捷方式,更不用說快捷方式需要事先知道setup.exe的確切路徑。 (安裝包將被搬來搬去。)


編輯:順便說一句,我的問題是,作爲一個描述here如出一轍。但不幸的是,沒有找到解決方案,那個人和提問者只是要求他的客戶手動使用以管理員身份運行,這正是我想要避免的。

回答

12

正如弗蘭克指出,在Visual Studio安裝項目的行爲是在微軟的網站上記載:

Visual Studio Installer Deployment

換句話說,通過VS008和VS2010產生的setup.exe總是可以不運行提示權限提升(除非您使用'以管理員身份運行'上下文菜單選項明確運行它)。它依次運行每個必備組件以及主MSI安裝程序作爲單獨的進程,並提示需要它的任何人進行權限提升。這意味着可能會有多個提升提示。

但是,由於某些原因,這並不總是奏效。在我的情況下,當我運行setup.exe時,.NET Framework必備條件的提升提示根本沒有出現。 但是如果我直接運行必備安裝程序,會出現提示。這意味着問題不在於必備組件,而在於setup.exe或Windows本身。

解決方案(或解決方法)?根據微軟在上面的鏈接,我們可以通過強制setup.exe來啓動每個必備組件和主MSI以及海拔提示運行。要做到這一點,我們需要手動編輯安裝項目文件(.vdproj)及以下RequiresElevation值更改爲TRUE,如下圖所示:

"MsiBootstrapper" 
{ 
    "LangId" = "3:1033" 
    "RequiresElevation" = "11:TRUE" 
} 

這不是理想的解決方案,但它是接近足以滿足我的原始要求,所以我對此解決方案感到滿意。

+0

打開.vdproj文件後,我到底需要設置此屬性? – jammy 2014-12-02 06:11:37

+0

沒問題,我發現它,它是右鍵單擊和openwith notpad。 – jammy 2014-12-02 08:49:03

+0

我有一個Windows 7,64位,俄語版本的錯誤,其中合併模塊的安裝路徑不正確。如果使用管理員權限啓動setup.exe,則相同的安裝會正常工作。我試圖改變安裝行爲以立即請求提升特權 - 使用「RequiresElevation」篡改,但不幸的是對於我來說這個解決方案並不起作用。 (所以立即要求提升,但它並沒有幫助我解決我的問題) – TarmoPikaro 2016-09-14 11:29:10

0

我認爲你的問題是關於安裝程序的名稱。此鏈接

How do I avoid UAC when my EXE file name contains the word "update"?

說,如果名下有更新或安裝在裏面,那麼UAC將在踢。

你能你的安裝程序重命名爲別的東西嗎?

+1

但這就是我想要的!我想UAC踢,但它沒有。此外,名稱'setup.exe'由Visual Studio自動生成,不能更改。 – 2012-07-16 01:41:17

+2

潛在有用的背景:[UAC如何工作](http://msdn.microsoft.com/en-us/library/aa905330.aspx#wvduac_topic3)和[Visual Studio安裝程序部署](http://msdn.microsoft.com /en-us/library/2kt85ked.aspx) - 特別是應用高程部分 – 2012-07-16 04:35:16

+0

謝謝弗蘭克,你的第二個鏈接實際上提供了我需要的信息!如果你可以提供一個正確的答案(該部分討論MsiBootstrapper - > RequiresElevation = True),我會接受你的答案。 :) – 2012-07-17 11:43:43

2

如果您想以管理員模式運行MSI,請按以下步驟操作:1)打開您的安裝項目,查看 - >啓動條件。 2)右鍵單擊啓動條件,然後在啓動條件中添加一個新條件。

3)右鍵單擊條件,選擇屬性窗口。

4)設置條件來

ADMINUSER

。 5)構建和安裝。