我试图从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;