Как запустить odbcad32 из программы на паскале?

Я пытаюсь запустить odbcad32.exe (Windows 10, 64 bit) из программы, написанной в Lazarus IDE. Я пробовал строить в 32 и 64 бит и всегда получал исключение с этим текстом:

Не удалось выполнить: 740

По-видимому, после некоторого поиска в Google это означает, что моей программе требуются права администратора, но я запускаю ее из учетной записи администратора. Я могу запустить odbcad32 с иконки на рабочем столе, с консоли и из гораздо более старой программы, написанной в Delphi IDE, как обычно (без вопросов о привилегиях в Windows), но не из кода Lazarus.

Так что я делаю не так? Программа должна быть кроссплатформенной. Я буду запускать что-то еще в Unix/OSX.

Вот исходный код ("smesse" - это процедура для отображения сообщений об ошибках):

uses SysUtils, Process;
...
function RunExe1(exefilename:string;var em:string):boolean;
var
   exe:TProcess;
   f:integer;
begin
     exe:=TProcess.Create(nil);
     exe.InheritHandles:=false;
     exe.Executable:=exefilename;
     for f:=1 to GetEnvironmentVariableCount do
       exe.Environment.Add(GetEnvironmentString(f));
     exe.Options:=exe.Options-[poWaitOnExit];
     try
        exe.Execute; // <--- Exception is raised here
        result:=true;
        em:='';
     except
       on e:exception do
       begin
         result:=false;
         em:=e.Message;
       end
     end;
     exe.Free;
end;
procedure Tselectdbw.odbcmanClick(Sender: TObject);
var
   em:string;
begin
     //if not RunExe1('C:\Windows\syswow64\odbcad32.exe',em) then smesse(em);
     //if not RunExe1('C:\Windows\system32\odbcad32.exe',em) then smesse(em);
     if not RunExe1('odbcad32.exe',em) then smesse(em);
end;

Я запустил его с полным путем тоже. Кстати, в Delphi я использовал WinAPI, и он отлично работает даже сегодня:

procedure ShellOpenFile(hWnd:HWND;filename:string);
begin
     shellexecute(hWnd,'open',
      pansichar(filename),nil,nil,SW_SHOW)
end;

0 ответов

Другие вопросы по тегам