Delphi 修改存储为资源的UAC清单文件
我希望我的程序在启动时只需请求提升权限,为此,我将向Delphi源代码添加一个清单文件作为资源。这是XML文件的内容:Delphi 修改存储为资源的UAC清单文件,delphi,resources,manifest,uac,Delphi,Resources,Manifest,Uac,我希望我的程序在启动时只需请求提升权限,为此,我将向Delphi源代码添加一个清单文件作为资源。这是XML文件的内容: 提高执行水平 我需要修改文件中的“YourApplicationExeName”,并添加当前的.exe名称,因为用户可以随时重命名.exe文件 我想知道的是:当用户打开可执行文件时,如何将可执行文件的新文件名添加到存储为资源的清单文件中?我知道如何获取新文件名,我只想知道如何使用新文件名更新资源文件?您所要求的是不可能的。进程从可执行文件启动。该文件在进程执行时被锁定,无法
提高执行水平
我需要修改文件中的“YourApplicationExeName”,并添加当前的.exe名称,因为用户可以随时重命名.exe文件
我想知道的是:当用户打开可执行文件时,如何将可执行文件的新文件名添加到存储为资源的清单文件中?我知道如何获取新文件名,我只想知道如何使用新文件名更新资源文件?您所要求的是不可能的。进程从可执行文件启动。该文件在进程执行时被锁定,无法修改 如果希望修改已编译的可执行文件中的资源,则可以使用
UpdateResource
API。但必须先锁定文件才能执行此操作。您需要从另一个流程执行此操作
我觉得你分析得太多了。希望修改的字段不应包含可执行文件的文件名。毕竟,文件名是可以更改的。此字段具有应用程序的名称,该值独立于可执行文件的文件名
对该字段的描述如下:
唯一地命名应用程序或程序集。名称使用以下格式:Organization.Division.name。例如Microsoft.Windows.MySamplePP
总之,我认为您被编写
YourApplicationExeName
的人误导了。在编译程序后,您不应该尝试修改此资源。编译应用程序时应正确设置字段,仅此而已 告诉Delphi不要将其作为程序集清单包含在可执行文件中,而是使用外部清单
例如:
Contoso.exe
Contoso.exe.manifest
.manifest
文件只是一个XML文件。当用户将Contoso.exe
重命名为Frobber.exe
时,您可以:
- 告诉他们也将
重命名为Contoso.exe.manifest
Frobber.exe.manifest
- 在启动
Frobber.exe之前,将
文件吐到硬盘上Frobber.exe.manifest
$R
选项,可以将步骤3/4合并为一个步骤。在这里,我们根本不需要另一个“如何编译和链接资源”的问题。实际上已经有几千人了。嗨,大卫。我知道如何编辑文本文件,我知道如何编译.rc文件并将其添加到项目源代码中。不是问题。我遇到的问题是更新资源文件——用新值编辑XML文件,然后再次将其自身添加为资源。我想要的是,当用户打开可执行文件时,它必须确定新文件名(不是问题),并将新文件名添加到清单文件(存储为资源)中。您的意思是什么?打开可执行文件?你是说创建一个新流程并执行它?请准确解释你在问题中的意思。单击“编辑”按钮并使其清晰。谢谢您的回答。因此,换句话说,如果我想更新可执行文件的资源,另一个可执行文件将不得不这样做,因为第一个可执行文件无法运行。此外,字段“YourApplicationExeName”不需要可执行文件的文件名,但需要应用程序的名称?这两项都正确。您绝对不希望像这样修改可执行文件。我从未遇到过这样的程序。