2011-01-19 63 views
2

我一直在試圖處理Windows UAC的'功能',它在應用程序中查找'setup'或'install'字樣,並自動相信它是安裝程序。UAC認爲我的應用程序是安裝程序第2部分

我嘗試添加一個嵌入的清單,如建議in this stackoverflow question,並能解決我的Vista和Windows 7的問題,而是打破服務器上我的應用程序2003

我也嘗試了一些修正我已經在其他一些網站上發現。我發現on Microsoft's site的一個建議是使用.config,而不是.exe.config。它效果很好,但這不是一種選擇,因爲它違背了我們所有其他應用程序的約定。

另一種選擇是將assemblyIdentity節點添加到manfiest。我嘗試了這一點,無法得到這個工作。

下面是我的清單,因爲它現在看起來。有任何想法嗎?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application> 
     <!--The ID below indicates application support for Windows Vista --> 
     <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
     <!--The ID below indicates application support for Windows 7 --> 
     <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> 
    </application> 
    <dependency> 
     <dependentAssembly> 
     <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity> 
     </dependentAssembly> 
    </dependency> 
    </compatibility> 
</assembly> 

Note: This is a managed C# application. And the manifest has to be embedded into the executable.

感謝,
皮特

+0

爲什麼你需要在不是安裝程序的名稱中使用「setup」/「install」? – 2011-01-19 21:15:47

回答

1

請參考MSDN documentation,你很可能已經制作清單錯誤,如果這打破Server 2003的不幸的是,我永遠只處理了體現爲本機代碼,所以我不知道從哪裏開始C#

個安裝程序檢測技術

安裝程序設計來部署應用軟件 ,最 寫入到系統目錄和 註冊表項。這些受保護的系統 位置通常由管理員用戶只能寫入 ,這意味着 標準用戶沒有足夠的安裝程序訪問權限。 Windows Vista啓發式檢測到 安裝程序和請求 管理員憑證或 來自管理員用戶的請求 以訪問權限運行。 Windows Vista還啓發式檢測到 更新程序和卸載程序。 請注意,UAC的設計目標是 防止安裝從 執行,而用戶不知道 和同意,因爲他們寫入 保護區域的文件系統和 註冊表。

安裝程序檢測僅適用於:

  1. 位可執行文件
  2. 應用沒有requestedExecutionLevel
  3. 運行與LUA標準用戶啓用

32位之前,互動過程過程被創建, 檢查以下屬性 以確定它是否是一個 安裝程序:

  • 文件名包括像「安裝」,「設置」,「更新」等
  • 關鍵詞在以下版本資源領域關鍵詞:供應商,公司名稱,產品名稱,文件說明,原始文件名,內部名稱和導出名稱。
  • 嵌入在可執行文件中的並排清單中的關鍵字。
  • 可執行文件中鏈接的特定StringTable條目中的關鍵字。
  • 可執行文件中鏈接的RC數據中的關鍵屬性。
  • 可執行文件中字節的目標序列。
1

this article描述您應該添加<requestedExecutionLevel>元素添加到應用程序清單(見「構建和嵌入一個與Microsoft Visual 2005工作室爲Windows XP和Windows Vista的應用程序清單」,這種方法將在Vista/7和XP/2003服務器上都可以工作),並將其level屬性設置爲asInvoker的值。

因此,您將從this answer引用的安裝程序檢測算法中消除選項2。

相關問題