2009-10-16 35 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