C# 程序兼容性助手认为我的应用程序是安装程序

C# 程序兼容性助手认为我的应用程序是安装程序,c#,.net,windows-7,uac,manifest,C#,.net,Windows 7,Uac,Manifest,我在Win7RTMx64上创建了一个.NETC#WinForms应用程序,假设我调用了DataInstaller 当我在调试器之外运行这个程序时(只是一个空表单,目前没有任何功能),它可以正常工作,直到我关闭表单为止。然后,我从程序兼容性助手处收到一条消息,上面说: 此程序可能未正确安装 然后,我可以选择使用推荐的设置重新安装,或者说安装工作正常 如果我将应用程序命名为“DataThingy”,这不是问题,我想这与名为*Setup的程序获得UAC屏蔽图标的方式有关 我假设我可以在应用程序清单中放

我在Win7RTMx64上创建了一个.NETC#WinForms应用程序,假设我调用了DataInstaller

当我在调试器之外运行这个程序时(只是一个空表单,目前没有任何功能),它可以正常工作,直到我关闭表单为止。然后,我从程序兼容性助手处收到一条消息,上面说:

此程序可能未正确安装

然后,我可以选择使用推荐的设置重新安装,或者说安装工作正常

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

我假设我可以在应用程序清单中放一些简单的东西来防止这种情况

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

更改名称不是选项,关闭UAC也不是选项,因此请不要建议这样做

编辑:

天哪

看来,如果以下任何一项都是真的,UAC将坚持己见:

Exe名称包含单词Installer

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会将机器完全锁定。(事实上,我不敢尝试,因为我不完全相信我只是在傻)

像Workshop一样,Alex会根据文件名进行猜测

但是您是否尝试添加清单文件?这允许您指定运行应用程序所需的访问权限


另一篇链接文章。

将此添加到您的清单中

<?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>


.

我刚刚遇到了这个问题,最后通过确保AssemblyInfo.cs文件中的程序集标题与cs.proj文件中的程序集名称匹配,解决了这个问题。当它们没有同步时,它抛出了这个错误,使它们保持一致,导致它消失。不确定它是否适用于您的情况,但相同的错误类似的情况下,可能值得一试,并避免忽略所有错误的公认答案。

实际上,Windows只是检查文件名中的“安装”或“安装”等词,以确定某个内容是否为安装程序。是的,这是愚蠢的。。。有什么办法吗?我想知道。。。不过,问得好。我希望如此,因为这对我来说太“神奇了”。。谢谢你的投票@Wim-不,这似乎是一个职位的建议。已在我的Win7 SP1计算机上验证PackageInstaller.exe-如果程序集标题为PackageInstaller,则没有问题只需添加清单即可(尽管我在发布此消息之前确实尝试过!)。有关更多信息,请参阅:和。谢谢。作为更新,不,这不起作用。一旦exe被部署到另一个位置,比如PCA再次抬起它丑陋的头。老问题,但文件名是为我做的。将安装程序改为工具,工作正常。感谢@EKSWorks的提示,即使是部署到程序文件中,也是如此!谢谢你,贾斯汀。我试着这么做的时候没什么区别。。。我的工具被称为“ccsetup”,因为它用这个名称替换了原来的设置工具,但只要名称或版本信息中有“setup”一词,兼容性垃圾就会不断弹出。当我删除它时,问题立即消失,但我不希望它有不同的名称。{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}适用于Windows 8。阅读更多信息:{1f676c76-80e1-4239-95bb-83d0f6d0da78}for Windows 8.1请参阅。这正是我所面临的问题。谢谢你指出这个问题,尽管这个问题已经回答了。我原以为是清单设置,但我更改了项目属性中的
程序集名称
,它与
默认命名空间
不匹配。