2015-06-30 26 views
1

我正在使用Windows 7和Microsoft Visual Studio 2010.如果文件的名称包含“update”,Windows会强制UAC提升文件?

我创建了一个简单的项目,其中一个MessageBox()调用WinMain()。该项目的名称是"update",所以EXE文件的名称是update.exe。我在链接器设置中关闭了清单生成。但是当我尝试在Visual Studio中开始调试时,它说我的应用程序需要提升。

我决定通过在Windows资源管理器中单击它来启动应用程序,但它仍然需要管理员权限。我将它重命名为update12345.exe12345update12345.exe,但它仍然需要提升。

但是,当我将其重命名为12345.exe时,它在没有请求管理员权限的情况下完美运行!我认为Windows需要提升所有名称包含"update"子字符的文件。因此,我从SysInternals DebugView中取出另一个文件(debugview.exe),并将其重命名为update.exe - 但它没有提升。

这种奇怪行为的原因是什么?

+0

您没有正确构建程序,它缺少声明它意识到UAC的清单。这对于Visual Studio来说很难做到,通过使用项目模板来开始您的项目,落在成功的大坑里。 –

+0

我一直开发没有清单的项目,他们完美地工作。我的项目设计为可在任何Windows系统上运行,并且不需要任何需要UAC的任何操作。但麻烦在于文件名:如果它包含“更新”,它需要UAC,否则它启动并且完美地工作。 – deselect

+0

Hmya,他们完美地工作,直到你碰到某种类型的墙。像这个。当你在注册表中进行访问并在禁止访问的地方访问文件时,你会有更多惊喜。清单的存在对旧版Windows不具有任何作用,但不知道它们的含义。 –

回答

3

如果您的应用没有在其清单中包含requestedExecutionLevel,安装程序检测技术将检查其名称是否包含“更新”,“安装”等,以检测是否为安装程序应用程序。 这是因为您的应用在重命名为“更新”时需要UAC,而其他应用不具有清单。

相关问题