使用环境变量进行调试时“程序无法启动,因为...... dll缺失”

时间:2012-09-12 15:00:13

标签: delphi debugging dll delphi-xe2

在这些情况下调试Delphi XE2 update 4中的可执行文件时,我得到了错误时提到的错误:

  • 取决于来自mqic.dll的{​​{1}} C:\Program Files \IBM\WebSphere MQ\bin\mqic.dllC:\Program Files\IBM\WebSphere MQ\bin Run位于系统路径上(不在用户路径上)。
  • 正在使用Parameters - >中的覆盖环境变量调试
  • Debugger - > Environment Block - > User overrides - > Including System Variables
  • 检查同一属性页面上的
  • Faulting application name: CAS400NTMQ.exe, version: 1.1.4639.52512, time stamp: 0x50508180 Faulting module name: ntdll.dll, version: 6.1.7601.17725, time stamp: 0x4ec49b60 Exception code: 0xc0000005 Fault offset: 0x0005333f Faulting process id: 0x4b20 Faulting application start time: 0x01cd90e36bb90816 Faulting application path: C:\Users\...\bin\CAS400NTMQ.exe Faulting module path: C:\Windows\SYSTEM32\ntdll.dll Report Id: a9853965-fcd6-11e1-ae66-78e3b5ca2514

这是错误(这是一个标记为“系统错误”的Windows DLL加载错误)。

  

程序无法启动,因为您的计算机缺少mqic.dll。尝试重新安装该程序以解决此问题。

一些注意事项:

  • 我作为普通用户进行调试(无论如何这都是正常的做法,但在这种情况下,由于客户端的策略,我不能成为管理员。)
  • 一旦我删除环境变量,它就可以工作(但程序barf因为它确实需要信息)。
  • 在Delphi启动之前指定环境变量很麻烦,但可以作为临时解决方法(我需要在调试时经常更改该变量以测试不同的场景; Delphi的启动/关闭时间使这很乏味)。
  • 我不能没有环境变量,因为对于没有源代码的应用程序来说它是必需的,并且无法及时重写它以便逐步淘汰

这是事件日志显示的内容:

{{1}}

问题:是否有其他解决方案或更简单的解决方法,而不是我上面使用的方法?

2 个答案:

答案 0 :(得分:6)

根据Andreas Hausladen's latest blog posthis answer here,这个XE2错误由IDEFixPack处理。 XE3不需要,因为XE3解决了这个问题。

所以我怀疑如果你能设法在这台机器上安装IDEFixPack,这可能是最有效的解决方法。即使您无法安装IDEFixPack,这个答案对其他读者仍然有用。

答案 1 :(得分:5)

使用用户覆盖的环境变量处理Delphi XE2时出现了问题。以示例应用为例:

program Project1;

{$APPTYPE CONSOLE}

uses
  System.SysUtils;

begin
  Writeln(GetEnvironmentVariable('PATH'));
  Readln;
end.

当用完调试器或没有用户覆盖环境变量时,这会输出路径。但是只要在Run-> Parameters-> Environment Block中引入环境变量,它就会输出一个空字符串。

可能的解决方法似乎是覆盖所需的变量,在本例中为“PATH”。然后程序可以再次输出(并可能使用)正确的路径。显然,这是一个相当有限的解决方法。一旦你使用了用户覆盖,你不仅会丢失'PATH'。 F.i.示例程序仍然无法输出'APPDATA'。

以前的Delphi版本似乎没有这个问题。有关QC的报告:Include System Variables isn't working anymore在构建17.0.4625.53395中关闭为“已修复”。