应用程序清单、管理员权限和在Windows Vista/7上的自动启动

4

所以,我有一个需要管理员权限才能运行的应用程序。

我创建了一个app.manifest文件。它运行得非常完美。

但是现在,我需要在Windows中设置我的程序自启动,但是我遇到了麻烦。如果我的程序有一个app.manifest文件,程序在Windows启动时不会加载,但如果我删除app.manifest文件,程序就可以正常工作。

这是app.manifest文件中的代码:

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="update.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>

  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->
    </application>
  </compatibility>
</asmv1:assembly>

感谢您的帮助。

1
请查看我的答案,如果您需要更多的指导,请告诉我,因为我正在积极研究同样的问题。 - Erx_VB.NExT.Coder
2个回答

5
当您请求管理员访问权限时,它未能运行,因为用户需要授权其作为管理员(点击UAC允许按钮)。如果它没有弹出,应该有一些在图标托盘中的东西,用户可以通过单击该图标来加载所有被阻止的exe文件以授予管理员权限。当您在没有清单的情况下运行时,它仅在默认情况下运行在标准访问下(非管理员访问,基本用户级别权限),因此您的应用程序正在运行但无法对只有管理员提升的应用程序才能执行的系统或文件/路径访问项进行更改。明白我的意思吗?
问题是,如果安装并最初以管理员提升的特权运行,则如何使exe自动启动具有管理员权限?这似乎有几个答案,但我仍在寻找哪些答案实际上有效且可靠。基本上,如果曾经提升过,那么它应该继续提升(自动地,无需提示用户)当它自动启动(重新启动后)-但它没有这样做,这就是问题所在。如果您在此方面取得进展,请告诉我。
更新:2012.11.10: 我已经找到了一个解决方案,使用Windows任务计划程序按编程方式安排任务(即在重启/启动期间运行EXE),您可以选择将其作为提升的应用程序运行,并且我认为您需要先被提升才能够安排此提升的自动运行条目在Windows任务计划程序中。我知道这听起来很奇怪,但微软已允许这种方式(仅此一种方式)作为在启动期间自动提升您的应用程序的方法,并且他们没有提供其他方法来执行此操作。因此,请使用适当的API注册Windows任务计划表,以使您的应用程序提升运行。

这是来自Microsoft的一个很好的工作示例:https://learn.microsoft.com/en-us/windows/win32/taskschd/boot-trigger-example--c---。通过使用此示例并将Principal的“LogonType”设置为“TASK_LOGON_S4U”,将“RunLevel”设置为“TASK_RUNLEVEL_HIGHEST”进行修改。 - ScienceDiscoverer

1

我不确定,但可能是关于启动用户的身份验证。如果你还没有,可以查看这里获取详细信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接