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

时间:2009-10-16 10:52:03

标签: c# .net windows-7 uac manifest

我在Win 7 RTM x64上创建了一个.NET C#WinForms应用程序,假设我已经调用了DataInstaller。

当我在调试器之外运行此程序时(此时只是一个没有功能的空表单),它可以正常工作,直到我关闭表单。然后,我从程序兼容性助手那里得到一条消息:

此程序可能未正确安装

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

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

我假设我可以在应用程序清单中添加一些简单的东西以防止这种情况发生?

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

更改名称不是一个选项,关闭UAC不是一个选项,所以请不要建议!

编辑:

OMG。

如果以下任何一种情况属实,UAC似乎坚持:

Exe name包含单词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程序员已经在Redmond重新安置到UAC团队。

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

我认为如果我尝试执行名为IAmAVirus.exe的应用程序,UAC会将计算机置于完全锁定状态。 (实际上,我不敢尝试,因为我并不完全相信我只是在愚蠢)

3 个答案:

答案 0 :(得分:43)

将此添加到您的清单中。

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

答案 1 :(得分:3)

喜欢工作坊亚历克斯会根据文件名进行猜测。

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

MSDN on how to create one from Visual studio 另一篇链接文章help

答案 2 :(得分:2)

我刚遇到这个问题并最终通过确保我在AssemblyInfo.cs文件中的程序集标题和我的cs.proj文件的程序集名称匹配来修复它。当他们没有同步时,它会抛出这个错误,使它们一样,导致它消失。不确定它是否适用于您的情况,但同样的错误类似的情况,可能值得一试,并避免一起忽略错误的接受答案。