程序兼容性助理认为我的应用程序是安装程序

我已经在Win 7 RTM x64上创build了.NET C#WinForms应用程序,我们可以说我已经调用了DataInstaller。

当我在debugging器之外运行这个程序(只是一个没有function的空表单),直到我closures表单才能正常工作。 然后我从程序兼容性助手那里得到一条消息:

该程序可能没有正确安装

然后,我可以select使用推荐的设置重新安装,或者说安装按预期工作。

如果我命名应用程序“DataThingy”,这不是一个问题,我想这与名为* Setup的程序获得UAC盾牌图标的方式有关。

我认为会有一些简单的东西,我可以把应用程序清单,以防止这一点?

我不确定这是否发生在Vista上,因为我目前没有访问权限。

更改名称不是一个选项,closuresUAC不是一个选项,所以请不要这样做!

编辑:

我的天啊。

看来,如果以下任何一个是真的,UAC坚持它的桨:

exe名称包含单词安装程序

AssemblyInfo.cs中

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

“安装程序”也可以是“安装程序”。

这是乞丐的信念,它确实如此。 很显然,一个老的VB6程序员被搬到了Redmond的UAC团队。

我仍然需要一个解决方法,我不准备接受我的应用程序不能被称为安装程序,因为它不会触摸registry或将任何文件放在Program Files文件夹中。

如果我试图执行名为IAmAVirus.exe的应用程序,我认为UAC会将机器置于完全locking状态。 (其实,我不敢尝试,因为我不完全相信我只是傻)

将其添加到清单中。

 <?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都提供了低级别的支持。 支持多个平台的应用程序不需要为每个平台单独清单。

取自应用程序(可执行)清单 。

就像Workshop Alex会根据文件名进行猜测。

但是,你有没有试图添加一个清单文件? 这使您可以详细说明运行应用程序所需的访问权限。

关于如何从Visual Studio创build一个MSDN的另一个链接文章, 帮助 。

我刚刚遇到了这个问题,并最终通过确保AssemblyInfo.cs文件中的汇编标题和我的cs.proj文件的汇编名称相匹配来解决此问题。 当他们没有同步,这是抛出这个错误,使他们一样,导致它消失。 不知道它是否适用于你的情况,但类似的情况相同的错误,可能值得一试,避免接受的答案忽略错误的一起。