我希望我的程序在启动时简单地请求提升权限,为此,我将一个Manifest文件作为资源添加到Delphi源代码中。这是XML文件内容:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.1.1.1"
processorArchitecture="X86"
name="YourApplicationExeName"
type="win32"/>
<description>elevate execution level</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
我需要修改文件所在的位置&#34; YourApplicationExeName&#34;并添加当前的.exe名称,因为用户可以随时重命名.exe文件。
我想知道的是:当用户打开可执行文件时,如何将可执行文件的新文件名添加到作为资源存储的清单文件中?我知道如何获取新文件名,我只想知道如何使用新文件名更新资源文件?
答案 0 :(得分:1)
你要求的是不可能的。进程从可执行文件开始。该进程正在执行时被锁定,无法修改。
如果您希望修改已编译的可执行文件中的资源,则使用UpdateResource
API。但是不能锁定文件才能这样做。您需要从不同的过程中执行此操作。
我认为无论如何你都在过度分析。您希望修改的字段不应包含可执行文件的文件名。毕竟,文件名可以更改。此字段具有应用程序的名称,该值与可执行文件的文件名无关。
documentation描述了这个字段:
以应用程序或程序集的唯一名称命名。使用以下格式作为名称:Organization.Division.Name。例如Microsoft.Windows.mysampleApp。
总而言之,我认为你被写过YourApplicationExeName
的人误导了。在编译程序之后,您根本不应该尝试修改此资源。您应该在编译应用程序时正确设置字段,就是这样。
答案 1 :(得分:0)
告诉Delphi不要在可执行文件中包含汇编清单,而是要有一个外部清单。
例如:
Contoso.exe
Contoso.exe.manifest
.manifest
文件只是一个XML文件。当用户将Contoso.exe
重命名为Frobber.exe
时,您可以:
Contoso.exe.manifest
重命名为Frobber.exe.manifest
Frobber.exe.manifest
Frobber.exe
文件呕吐到硬盘上