2009-10-16 105 views
41

我已經在Win 7 RTM x64上創建了一個.NET C#WinForms應用程序,我們可以說我已經調用了DataInstaller。程序兼容性助手認爲我的應用程序是安裝程序

當我在調試器之外運行此程序(只是一個空的表單,此時沒有功能),它工作正常,直到我關閉表單。然後我從程序兼容性助手,說一個消息:

該程序可能沒有正確安裝

然後我得到使用推薦的設置重新安裝或者說,安裝沒有工作如預期的選項。

如果我命名應用程序'DataThingy',這不是問題,我想這與名爲* Setup的程序獲得UAC盾牌圖標的方式有關。

我認爲會有一些簡單的東西,我可以放在應用程序清單,以防止這種情況?

我不確定這是否發生在Vista上,因爲我目前沒有訪問權限。

更改名稱不是一個選項,關閉UAC不是一個選項,所以請不要提示!

編輯:

OMG。

看來,如果任一下列的都是真實的,UAC堅持在其槳:

埃克名稱包含單詞安裝

的AssemblyInfo.cs

AssemblyTitle contains the word 'Installer' 
    e.g. [assembly: AssemblyTitle("DataInstaller")] 
AssemblyProduct contains the word 'Installer' 
    e.g. [assembly: AssemblyProduct("Data Installation Utility")] 

「安裝」也可以是'安裝'。

乞丐的信念,它的確如此。很顯然,一位老的VB6程序員被搬到了雷德蒙的UAC團隊。

我仍然需要一種解決方法,我不準備接受我的應用程序不可能被稱爲安裝程序,因爲它不會觸摸註冊表或將任何文件放在Program Files文件夾中。

我假設如果我試圖執行名爲IAmAVirus.exe的應用程序,UAC會將機器置於完全鎖定狀態。 (其實,我不敢嘗試,因爲我不完全相信我只是傻)

+3

實際上,Windows只是檢查「setup」或「install」等文件的文件名,以確定是否某個安裝程序是安裝程序。是的,這是愚蠢的...可以做些什麼呢?我想知道......好Q。 – 2009-10-16 11:05:12

+0

我希望如此,因爲這對我來說太有意思了。「謝謝你的投票! – Carl 2009-10-16 11:15:35

+2

@Wim - 不,它似乎是AssemblyTitle,就像帖子建議的那樣。在我的Win7 SP1機器上對PackageInstaller.exe進行驗證 - 如果程序集標題是PackageNstaller,則沒有問題 – 2013-07-26 14:54:24

回答

41

將此添加到您的清單。

<?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}"/> 
    <!--The ID below indicates app support for Windows 8 --> 
    <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> 
    <!--The ID below indicates app support for Windows 8.1 --> 
    <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> 
    </application> 
</compatibility> 

在前面的例子中的所有操作系統提供低級別支持的GUID。支持多個平臺的應用程序不需要爲每個平臺單獨清單。

摘自App (executable) manifest

+0

即使在部署到ProgramFiles時也能像魅力一樣工作!謝謝Justin。 – Carl 2010-01-29 11:33:21

+1

當我嘗試它時,這沒有任何區別...我的工具被稱爲「ccsetup」,因爲它用該名稱替換了原始設置工具,但只要名稱或版本信息中的單詞「setup」在它,兼容性垃圾不斷彈出。當我刪除它時,問題立即消失,但我不希望它有不同的名稱。 – Nyerguds 2011-05-31 23:11:06

+4

{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38} for Windows 8.詳細信息:http://msdn.microsoft.com/en-us/library/windows/desktop/hh848036(v=vs.85).aspx – mjb 2013-11-22 03:51:07

3

Like Workshop Alex會根據文件名進行猜測。

但你有沒有嘗試添加清單文件?這使您可以詳細說明運行應用程序所需的訪問權限。

MSDN on how to create one from Visual studio 另一個鏈接文章help

+1

只需添加清單就可以實現這一功能(儘管在發佈之前我確實嘗試了這一點,但請誠實!)。有關更多信息,請參閱:http://blogs.msdn.com/cjacks/archive/2009/06/18/pca-changes-for-windows-7-how-to-tell-us-you-are -not-an-installer-take-2-because-we-changed-the-rules-on-you.aspx and http://technet.microsoft.com/en-us/library/dd638326%28WS.10%29的.aspx。謝謝。 – Carl 2009-10-16 14:35:28

+0

作爲更新,不,這沒有奏效。只要exe被部署到另一個位置,例如,PCA就會再次擡起它醜陋的頭。 – Carl 2009-11-03 09:47:52

+1

老問題,但文件名是爲我做的。更改安裝程序到工具,它工作正常。感謝提示@EKS – DTown 2010-09-28 11:56:20

2

我剛剛遇到了這個問題,並最終通過確保我的AssemblyInfo.cs文件中的彙編標題和我的cs.proj文件的彙編名稱相匹配來修復它。當他們沒有同步時,它拋出這個錯誤,使他們一樣導致它消失。不確定它是否適用於您的情況,但類似情況的錯誤類似,可能值得一試,並避免一致忽略錯誤的可接受答案。

+0

這正是我面臨的問題。感謝你指出了人,儘管問題得到了解答。我認爲這是清單設置,但是我已經在項目屬性中更改了'Assembly name',並且它不匹配'Default namespace'。 – strider 2014-03-18 18:27:53