重复清单会导致“无法创建进程”

时间:2011-04-15 12:43:11

标签: delphi manifest

我一直在尝试使用UAC获取更新应用程序,在进行一些挖掘后,我需要在我的应用程序中包含清单。

清单名为MyApp.manifest。为了在项目中包含这个,我创建了一个名为MyApp.rc的RC文件。它内置于名为MyApp.rec的文件中,其中包含预构建命令brcc32 $(PROJECTNAME).rc -fo$(PROJECTNAME).rec

然后在我的DPR中我有

{$R *.REC}
{$R *.RES}

begin
  Application.Initialize;

这允许Delphi处理版本信息等事情。

将应用程序复制到Windows 7时,这一切都正常。

我今天去调试应用程序,我的开发环境是Windows XP,我马上得到: Unable to Create Process

经过多次挖掘后,我被指向了XN Resource Editor。这立即显示出以下问题:

Duplicate Manifest

这些清单中的第一个(标记为1的清单)是MyApp.manifest(这可能是为什么它在Windows 7中可以正常工作?),如果我删除第二个清单,应用程序可以完美运行。奇怪的是,如果我更改RC文件中的数字,则数字1会随之改变,但第二个清单仍为数字2。

我认为第二个清单可能与运行时主题有关,但是禁用它根本不起作用(我取消勾选复选框,关闭项目选项,打开项目选项并勾选复选框)。

那么导致第二个清单出现的原因是什么?我该如何摆脱它?

德尔福版本是2007年

3 个答案:

答案 0 :(得分:2)

如果你想使用你自己的清单,你必须根据你的delphi版本,按照这些步骤禁用delphi生成的清单。

  1. 从项目中删除所有TXPManifest组件
  2. 删除项目中对XpMan单元的任何引用
  3. 禁用项目中的“启用运行时主题”选项 - >选项 - >应用

答案 1 :(得分:1)

什么版本的Delphi?检查UxTheme的所有项目文件中的uses子句;这是来自SoftGems的Mike Lischke的旧主题经理,该主题经理已被纳入VCL。您还可以查找XPMan,它为Delphi 7添加了清单;它也来自迈克。在加入VCL之前,他在网站上将其作为免费操作系统。

你还需要做一个Project-> Build而不仅仅是之后的编译(或者在更改'runtime themes'设置之后),以强制重新编译所有单元并且可执行文件是完全重建。

答案 2 :(得分:1)

我在处理其他事情一段时间后回到此项目并在打开项目之前删除了现有的.res文件

我认为Delphi将项目.res文件缓存在内存中,并且只在编译/构建时才更新它,因为这个问题已经完全消失了。