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

Jer*_*ers 4 delphi debugging dll delphi-xe2

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

  • 依赖于mqic.dll从Webshpere的即在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 在同一属性页面上检查

这是错误(它是标记为"系统错误"的Windows DLL加载错误).

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

几点说明:

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

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

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
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*nan 6

安德烈亚斯Hausladen的最新博客文章,和他的答案在这里,这XE2错误是由IDEFixPack照顾.并且在XE3中不需要,因为XE3解决了这个问题.

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


Ser*_*yuz 5

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

program Project1;

{$APPTYPE CONSOLE}

uses
  System.SysUtils;

begin
  Writeln(GetEnvironmentVariable('PATH'));
  Readln;
end.
Run Code Online (Sandbox Code Playgroud)

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

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

以前的Delphi版本似乎没有这个问题.有关于质量控制的报告:包含系统变量不再起作用,在构建17.0.4625.53395中已关闭为"已修复".

  • +1.就像一个FYI:修复的内部版本号是XE3的初始发行版本和内部版本号.在XE3中测试时,也可以确认您的代码为`PATH`生成正确的输出. (4认同)
  • 作为上述注释的注释:在Project-> Options-> Environment Block中使用和不使用"PATH"的用户覆盖确认.(在我将其添加到那里之前编辑超时.) (2认同)
  • @Ken:我可以确认XE2中的错误和XE3中的修复.Build 17.0.4625是XE3. (2认同)