45

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

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

此程序可能未正确安装

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

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

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

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

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

编辑:

我的天啊。

看来,如果以下任何一项属实,UAC 就会坚持下去:

exe 名称包含单词 Installer

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

4

3 回答 3

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

于 2010-01-29T07:10:01.053 回答
3

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

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

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

于 2009-10-16T11:40:36.783 回答
2

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

于 2012-06-05T16:05:11.940 回答