Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 修改存储为资源的UAC清单文件_Delphi_Resources_Manifest_Uac - Fatal编程技术网

Delphi 修改存储为资源的UAC清单文件

Delphi 修改存储为资源的UAC清单文件,delphi,resources,manifest,uac,Delphi,Resources,Manifest,Uac,我希望我的程序在启动时只需请求提升权限,为此,我将向Delphi源代码添加一个清单文件作为资源。这是XML文件的内容: 提高执行水平 我需要修改文件中的“YourApplicationExeName”,并添加当前的.exe名称,因为用户可以随时重命名.exe文件 我想知道的是:当用户打开可执行文件时,如何将可执行文件的新文件名添加到存储为资源的清单文件中?我知道如何获取新文件名,我只想知道如何使用新文件名更新资源文件?您所要求的是不可能的。进程从可执行文件启动。该文件在进程执行时被锁定,无法

我希望我的程序在启动时只需请求提升权限,为此,我将向Delphi源代码添加一个清单文件作为资源。这是XML文件的内容:


提高执行水平
我需要修改文件中的“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
    文件吐到硬盘上

不是复制品。我的问题是如何修改XML文件(添加当前应用程序名称)并将其作为资源文件添加以供再次使用?修改文件的方式与修改任何文件的方式相同。知道如何编辑文本文件是编程的基本先决条件。如果您不知道如何编辑文本文件,则需要返回到开头。如果你想知道如何从你现在的位置到你想要的位置,那么你需要详细解释你目前做了什么,即你现在的位置。我们无法读懂你的心思。请编辑这个问题并多做一些解释。你所要做的就是从任何关于如何编译和添加清单资源的教程开始。他们都一样。你可以在那个问题上找到合适的。1.创建XML文件。2.创建.rc文件。3.将.rc文件编译为.res文件。4.链接.res文件。如果您希望使用高级
$R
选项,可以将步骤3/4合并为一个步骤。在这里,我们根本不需要另一个“如何编译和链接资源”的问题。实际上已经有几千人了。嗨,大卫。我知道如何编辑文本文件,我知道如何编译.rc文件并将其添加到项目源代码中。不是问题。我遇到的问题是更新资源文件——用新值编辑XML文件,然后再次将其自身添加为资源。我想要的是,当用户打开可执行文件时,它必须确定新文件名(不是问题),并将新文件名添加到清单文件(存储为资源)中。您的意思是什么?打开可执行文件?你是说创建一个新流程并执行它?请准确解释你在问题中的意思。单击“编辑”按钮并使其清晰。谢谢您的回答。因此,换句话说,如果我想更新可执行文件的资源,另一个可执行文件将不得不这样做,因为第一个可执行文件无法运行。此外,字段“YourApplicationExeName”不需要可执行文件的文件名,但需要应用程序的名称?这两项都正确。您绝对不希望像这样修改可执行文件。我从未遇到过这样的程序。