2010-03-12 38 views
8

如何部署应用程序以便它们需要管理员权限,而不需要最终用户手动完成?如何以管理员模式运行应用程序?

我使用Delphi 2009构建应用程序。

+0

你用什么来部署你的程序? (这是非常相关的,因为你可能需要你的安装程序生成具有“以管理员身份运行”标志设置的快捷方式。) – 2010-03-12 14:35:32

回答

11

通过在应用程序清单中使用requestedExecutionLevel元素,您可以通知Windows,您的应用程序需要以管理员身份运行。

清单文件是一个如下所示的XML文件。它应该被命名为YourApp.exe.manifest并放置在与可执行文件相同的文件夹中。 (也可以嵌入到应用程序的资源,它必须有一个RT_MANIFEST资源类型和1的ID)

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="YourApp" type="win32"/> 
    <description>Description of your application</description> 
    <!-- Identify the application security requirements. --> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
     <requestedPrivileges> 
     <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</assembly> 

有关应用程序清单的详细信息,以及如何创建它们,请参阅Create and Embed an Application Manifest (UAC)在MSDN。

请注意,清单仅在Windows Vista及更高版本中受到尊重。如果您的用户在Windows XP上以标准用户身份运行,则您的应用程序将不会以管理员身份启动;您可能需要编写代码来检测这是否会对您的应用程序造成问题。

+0

我试过你的solutino在delphi xe2上使用新的VCL Forms应用程序,用上面的内容创建一个txt文件从<程序集到/程序集>,嵌入在资源强制ID = 1和RT_MANIFEST广告类型,我编译,但后来当我运行它没有任何反应,我应该期望Windows迫使我作为管理员运行? – LaBracca 2013-07-02 07:05:47

+0

@ user193655:你是否已关闭UAC?如果是这样,那么Windows不会提示你升级。否则,你描述的步骤听起来是正确的。作为一个新问题发布完整的细节可能会更好;可能有一些微妙的Delphi特定问题(我不知道),其他Delphi用户可以为您解答。 – 2013-07-02 13:48:06

+0

@BradleyGrainger:来自UAC的地方? – 2017-09-06 07:17:12

2

另一个选项虽然不推荐用于“每天的应用程序”,但是可以使用“Install”或“Setup”作为名称的一部分为您的可执行文件命名。请记住,如果您不更改任何注册表设置或创建任何新文件,则Windows会向用户显示该程序可能未正常运行的警告。

相关问题