2010-06-22 54 views
3

默認情況下,像Visual Studio 2008或2010這樣的新微軟IDE會創建帶有清單資源的exe文件。但我仍然在Visual Studio 6中有一些項目,我需要編譯它們以最大程度地兼容Win Vista和Win 7.
因此,我對清單資源有很多疑問:
1.是否需要清單資源爲Win7或WinVista創建應用程序?
2. WinVista和Win7在最小清單中需要什麼信息?
3. Windiws 7下的程序兼容性助手能錯誤顯示資源觸發嗎?
4. DLL是否需要清單資源?
5.我可以在哪裏獲得有關使用清單的信息?哪些程序必須具有清單資源?

回答

3

1.是否需要顯示資源來爲Win7或WinVista創建格式良好的應用程序?

沒有清單(帶有requestedExecutionLevel元素)Windows Vista和Windows 7使用啓發式方法來嘗試猜測應用程序是否爲安裝應用程序 - 這意味着正常的應用程序可能沒有可識別的原因開始觸發UAC提升預兆。

requestedExecutionLevel還告訴系統不虛擬化對受保護資源的訪問。

2. WinVista和Win7在最小清單中需要什麼信息?

至少是requestedExecutionLevel,所以UAC知道你是否 - 要求提升,並且不虛擬化對程序文件或HKLM的訪問。

3. Windiws 7下的程序兼容性助手可能出錯嗎?

帶有清單,Windows vista和7將認爲你是一個「現代」的應用程序,它只是被打破了。程序兼容性助手邏輯保留用於遺留應用程序 - 即沒有清單的應用程序或具有僅具有XP唯一條目的清單(即缺少requestedExecutionLevel)的應用程序。

4. DLL是否需要manifest資源?

從Windows 7開始只有當Dll使用它來綁定到並行程序集時。 MSDev Studio使用requestedExecutionLevel元素在Dll中創建清單,但實際上會產生無法在某些情況下成功加載的無效Dll。

5.我在哪裏可以獲得有關使用清單的信息?

在MSDN上:Isolated Applications and Side By Side Assemblies是我所知道的唯一的官方參考資料,即使嘗試描述清單模式以及如何使用它們。


總結:如果您正在開發 - 從而有可能測試您的應用程序的行爲 - 在Vista或Windows 7,這將是最好的,如果你提供一個清單,以避免你的申請被視爲傳統應用程序。

2

有幾個原因可能需要清單。首先,您需要告訴Windows您的程序瞭解UAC策略。這需要包含<requestedExecutionLevel>元素的清單。如果缺少這些信息,Windows會將您的程序視爲傳統程序,並將不安全訪問重定向到註冊表和文件系統。寫入特權註冊表鍵被重定向到HKCU。將文件寫入特權目錄將重定向到獨立存儲。

如果您的程序使用存儲在Windows並行緩存中的DLL,則需要一個清單。如果你仍然使用VS6,這種情況不太可能發生。 WinSxS通過VS2005和VS2008程序用於MFC和CRT庫。但不是VS2010,受到MSFT客戶的普遍需求。

如果您要爲應用程序啓用可視化主題,則需要清單。從comctl32.dll版本6.0加載公共控件的現代版本所需的,它存儲在並行緩存中,而不是存儲在system32中的舊版本中。

如果您使用無註冊表的COM,則清單條目會替換通常寫入註冊表的內容,從而允許本地部署進程內COM服務器,您需要清單。

大部分情況是在Visual Studio的現代版本中自動執行的。

相關問題