Jeroen Wiert Pluimers
Jeroen Wiert Pluimers

Reputation: 24473

while debugging with Environment Variable "The program can't start because ....dll is missing"

I get the error mentioned further on error when debugging an executable in Delphi XE2 update 4 under these circumstances:

This is the error (it's a Windows DLL load error marked "System Error").

The program can't start because mqic.dll is missing from your computer. Try reinstalling the program to fix this problem.

A few notes:

This is what the event log shows:

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

Question: is there another solution or easier workaround than what I'm using above?

Upvotes: 4

Views: 2056

Answers (2)

David Heffernan
David Heffernan

Reputation: 612934

According to Andreas Hausladen's latest blog post, and his answer here, this XE2 bug is taken care of by IDEFixPack. And is not needed in XE3 since XE3 fixes the problem.

So I suspect that may be the most effective workaround if you can manage to get IDEFixPack installed on this machine. Even if you can't get IDEFixPack installed, then this answer could still be useful to other readers.

Upvotes: 6

Sertac Akyuz
Sertac Akyuz

Reputation: 54802

There's something wrong with Delphi XE2's processing with user overridden environment variables. Take the sample app:

program Project1;

{$APPTYPE CONSOLE}

uses
  System.SysUtils;

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

This outputs the path fine when run out of the debugger, or when there's no user override environment variable. But as soon as you introduce an environment variable in Run->Parameters->Environment Block, it outputs an empty string.

A possible workaround seems to be to override the required variable, in this case 'PATH'. Then the program can output (and possibly use) the correct path again. Obviously this is a fairly limited workaround. Once you employ a user override, it's not only 'PATH' you lose. F.i. the example program still won't be able to output 'APPDATA'.

Previous Delphi versions does not seem to have this problem. There's a report on QC: Include System Variables isn't working anymore which is closed as 'fixed' in build 17.0.4625.53395.

Upvotes: 5

Related Questions