我如何从pascal程序运行odbcad32?

时间:2017-07-18 08:12:39

标签: windows delphi lazarus freepascal

我试图从Lazarus IDE中编写的程序运行odbcad32.exe(Windows 10,64位)。 我试过在32& 64位,并且总是有这个文本的例外:

  

执行失败:740

显然,经过一些谷歌搜索,这意味着我的程序需要管理员权限,但我是从管理员帐户运行它。 我可以通过桌面上的图标,控制台以及通常用Delphi IDE编写的旧程序运行odbcad32(没有关于权限的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 个答案:

没有答案