2010-11-02 29 views
9

我爲Visual Studio 2008(SP1)爲Office 2007插件製作了Visual Studio安裝項目。安裝程序僅將文件複製到每個用戶位置(LocalAppData),並且只將註冊表設置寫入HKEY_CURRENT_USER,但在Windows 7下運行時,MSI在開始複製文件之前要求提供管理員憑據。安裝程序在Windows XP上以有限的用戶帳戶正常運行,但在Windows 7下,似乎需要管理員權限。如何爲有限(非管理員)用戶進行設置工作

我一直無法找到一種方法來刪除管理員高度要求,我想知道如何做到這一點,或者如果它不可能與Visual Studio安裝項目做到這一點。

**更新2010-11-03(更多詳情)**

當我建立在Visual Studio安裝項目,它會創建一個setup.exe並MSI文件。 Visual Studio 2008似乎並沒有給我足夠的控制權,以便如何創建setup.exe或如何創建MSI文件。 setup.exe文件似乎只用於安裝我的Office 2007 AddIn可能需要的任何必備組件。它是可以獨立運行的MSI文件,它安裝實際的Office 2007 AddIn。我想了解如何標記MSI文件,使其不要求管理員權限,因爲我的MSI文件僅將文件複製到每個用戶的位置,並且只將註冊表設置寫入HKEY_CURRENT_USER。

+1

爲什麼這個問題被標記爲「lua」? – lhf 2010-11-02 20:13:10

+0

我將它標記爲LUA,因爲我認爲LUA的意思是「有限的用戶帳戶」 – 2010-11-03 14:50:13

回答

11

我相信我已經找到了這個網頁上的答案:

http://blogs.msdn.com/b/rflaming/archive/2006/09/30/778690.aspx


如何建立一個標準用戶包?

這需要一點工作才能將軟件包僅安裝到標準用戶具有權限的位置。有些要求是

  1. 使用類型51自定義操作中InstallUISequence總是取消設置ALLUSERS(每用戶選項)

  2. 文件必須只寫入文件夾是標準用戶有權訪問。假設ALLUSERS始終設置爲每個用戶的設置,則可以使用可重定向的文件夾屬性,但不能使用ProgramFilesFolder,因爲它不會針對每個用戶重定向。

  3. 將應用程序安裝到LocalAppDataFolder下的某個位置。

  4. 所有的註冊表設置都應該寫入註冊表表格根目錄列中的HKCU。

  5. 在摘要信息流中翻轉字計數屬性的位3以表示不需要憑證提示。

  6. 如果您有引導程序(通常名爲setup.exe),請顯示requestedExecutionLevel以運行asInvoker。

  7. 由於ICE檢查每個用戶和每個機器狀態的混合不正確,所以通過ICE驗證。

  8. 從標準用戶帳戶和提升的命令提示符處測試以確認行爲。

  9. 爲您的用戶提供包的用戶特定性質的文檔,因爲這在今天的應用程序安裝中是非典型的。


注:第5步可以使用逆戟鯨,微軟的MSI編輯工具來完成。打開Orca中的MSI文件,選擇View - > Summary Information ...,然後選中「UAC Compliant」複選框。注意#2:可以使用包含在Microsoft SDK中的WiSumInf.vbs示例腳本文件完成第5步:C:\ Program Files \ Microsoft SDKs \ Windows \ v7.0 \ Samples \ sysmgmt \ msi \ scripts \ WiSumInf.vbs

注意#3:通過右鍵單擊安裝項目,選擇視圖 - >用戶界面,獲取「安裝/啓動」屬性的步驟1似乎在Visual Studio Step Project中處理/安裝文件夾「頁面並將」InstallAllUsersVisible「設置爲False。

注4:另一種方式來做到第5步,使用列入「的Windows SDK組件的Windows安裝程序開發者」 http://msdn.microsoft.com/en-us/library/aa370310(VS.85).aspx

加入到注#4 Msiinfo.exe工具將程序:假設您正在使用長文件名和壓縮介質(對於MSI默認行爲)的PostBuildEvent命令會是這樣的:

"C:\Program Files (x86)\Windows Kits\8.1\bin\x86\MsiInfo.exe" "$(BuiltOuputPath)" /w 10 

請注意,你將不得不改變路徑MsiInfo相匹配的一個一世t在你的系統中。

+1

很好的答案,像一個魅力工作! – 2012-01-05 20:16:47

0

如果您的安裝程序名爲'setup.exe'或'install.exe',則Win7會「知道」它是一個安裝程序,並且默認情況下會以'需要管理員'模式運行它。你需要添加一個清單你的安裝程序(內部或外部),告訴它以較低的權限運行。

MSDN中的示例清單如下所示。將值'IsUserAdmin'更改爲您的程序名稱,然後將其另存爲exe文件夾中的'executable_name .exe.manifest'。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity version="1.0.0.0" 
    processorArchitecture="X86" 
    name="IsUserAdmin" 
    type="win32"/> 
    <description>Description of your application</description> 
    <!-- Identify the application security requirements. --> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
     <requestedPrivileges> 
     <requestedExecutionLevel 
      level="asInvoker" 
      uiAccess="false"/> 
     </requestedPrivileges> 
     </security> 
    </trustInfo> 
</assembly> 

查看文章here瞭解更多信息。

+0

我不確定我可以將該解決方案應用於我的方案。當我構建我的Visual Studio安裝項目時,它會創建一個setup.exe和一個MSI文件。此外,Visual Studio 2008似乎沒有給我足夠的控制這些文件的創建方式。 setup.exe的目的似乎只是爲了安裝可能需要安裝的任何先決條件。但是,它是MSI文件,爲我的AddIn執行文件和註冊表項的實際安裝。我需要弄清楚如何對MSI文件進行操作。 – 2010-11-03 15:22:14

相關問題