如何从Delphi7正确打开.bat文件(例如,它打开RandomApp.exe)?

0 windows delphi cmd batch-file delphi-7

我搜索了很多,但我找不到正确的答案.

目录:

  • Project(此文件夹包含delphi代码和名为"RunThis"的文件夹

    • RunThis

      • RandomApp.exe
      • 的run.bat
      • CONFIG.TXT

Run.bat代码

start %cd%\RandomApp.exe
pause
Run Code Online (Sandbox Code Playgroud)

Delphi 7(单击按钮执行此代码.)

ShellExecute (application.handle, 'open', 'cmd', PChar('cmd.exe /c RunThis\Run.bat'), nil, SW_MAXIMIZE
Run Code Online (Sandbox Code Playgroud)

如果我没有为目录添加'cmd.exe/c'部分,Delphi将打开一个没有任何代码的cmd.类似于是否必须运行cmd.exe.但是,如果我添加'cmd.exe/c',则它会正确打开Run.bat.

Windows给我这个错误:Windows无法找到'C:\ Project\RunThis\RandomApp.exe'.请确保您正确键入名称,然后再试一次.

有趣的是,如果我只是双击Run.bat,它就会完美无缺.但是,当我通过Delphi打开它时,它给了我这个错误.我想也许Run.bat当前地址有问题.所以不要说:

start RandomApp.exe
Run Code Online (Sandbox Code Playgroud)

我使用了完整的当前目录:

start %cd%\RandomApp.exe    
Run Code Online (Sandbox Code Playgroud)

只是补充一下,当我让Delphi 7直接打开程序时,例如:

ShellExecute(Handle, 'open', PChar('RunThis\RandomApp.exe'),null, null, SW_SHOWNORMAL) ;
Run Code Online (Sandbox Code Playgroud)

该程序给了我一个错误,它无法找到"Config.txt".RandomApp.exe使用存储其所有设置的文本文件.

同样,如果我只是单击Run.bat或RandomApp.exe,它们都会完美执行.问题是当我尝试用代码打开它时.我觉得它与目录有关,但我不太清楚.

非常感谢你.

PS:运行Windows 10.

Rem*_*eau 5

不要依赖相对路径,总是使用绝对路径.

RandomApp.exe可能使用相对路径来查找Config.txt,但是当您从应用程序运行它时,当前工作目录是您的项目文件夹,而不是RunThis文件夹.这就是RandomApp.exe找不到文件的原因.所以传递正确的文件夹ShellExecute(),例如:

var
  Folder: string; 
begin
  Folder := ExtractFilePath(Application.ExeName)+'RunThis\' ;
  ShellExecute(Application.Handle, nil, PChar(Folder+'Run.bat'), nil, PChar(Folder), SW_MAXIMIZE);
end;
Run Code Online (Sandbox Code Playgroud)

  • @AlainD HWND*可以*为0,但*不应该为0,如果你有一个可用.实际上,由于代码是单击按钮,我将使用Form的HWND而不是Application的. (2认同)