【问题标题】:Duplicate Manifest causes 'Unable to Create Process'清单重复导致“无法创建进程”
【发布时间】:2011-04-15 23:38:42
【问题描述】:

我一直在尝试使用 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,我立即得到:

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

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

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

那么是什么导致第二个清单出现?以及如何摆脱它?

Delphi 版本是 2007

【问题讨论】:

  • MANIFEST_RESOURCE_ID 为 2 通常在 DLL 中使用。我怀疑这对你有帮助,但它不会由 Delphi IDE 生成。只需在您的项目中搜索 $R,您就会找到它!

标签: delphi manifest


【解决方案1】:

如果您想使用自己的清单,则必须根据您的 delphi 版本,按照以下步骤禁用由 delphi 生成的清单。

  1. 从您的项目中删除任何 TXPManifest 组件
  2. 删除项目中对 XpMan 单元的任何引用
  3. 禁用“启用运行时主题”选项,出现在项目 -> 选项 -> 应用程序中

【讨论】:

  • 我无法禁用“启用运行时主题”选项。它拒绝被取消勾选(我不知道为什么)
  • 当您说...I untick the checkbox, close project options, open project options and the checkbox is ticked 这可能是由您的 ide 中启用此选项的某些第三方插件引起的。
【解决方案2】:

什么版本的德尔福?检查所有项目文件中的uses 子句是否有UxTheme;它是来自 SoftGems 的 Mike Lischke 的旧主题管理器,它被合并到 VCL 中。你也可以查找XPMan,它为Delphi 7添加了一个manifest;它也来自迈克。在包含在 VCL 中之前,他将其作为免费操作系统放在他的网站上。

您还需要进行项目->构建,而不仅仅是事后编译(或更改“运行时主题”设置之后),以强制重新编译所有单元并完全执行可执行文件重新创建。

【讨论】:

  • 向问题添加了 Delphi 版本。该应用程序仅包含 1 个表单,并且该表单仅包含 1 个进度条。 uxTheme 和 XPTheme 都不包含在应用程序的任何地方(我可以看到)
  • 刚刚在 D2007 中创建了一个新的 VCL 表单应用程序并在其上放置了一个按钮。运行应用程序,按钮是主题。使用 Project->Options->Compiler,取消选中运行时主题,保存更改,然后运行应用程序。该按钮未主题绘制。对同一个应用重复此操作(切换选项、运行、切换选项、运行)每次都会继续更改按钮的外观。
【解决方案3】:

我在做了一段时间的其他工作后回到了这个项目并删除了现有的 .res 文件在打开项目之前

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 2017-03-09
    • 2021-08-11
    • 2020-04-18
    • 2018-01-12
    相关资源
    最近更新 更多