【发布时间】:2015-08-25 18:45:00
【问题描述】:
*.bat 文件的内容:
cd "C:\Program Files\WinRAR"
WinRAR a -r -ep1 "D:\Temp\250815\GiftCard-250815-1to10.zip" "D:\Temp\250815\word"
基本上,这个文件告诉 WinRAR 将文件夹“word”压缩成“GiftCard-250815-1to10.zip”。
delphi代码行:
StartProcess('cmd.exe', '/C ' + 'D:\Temp\GenCards.bat', true, true);
我也试过了:
ShellExecute(Handle, 'runas', PChar('C:\Program Files\WinRAR.exe a -r -ep1 "D:\Temp\250815\GiftCard-250815-1to10.zip" "D:\Temp\250815\word"'), nil, nil, SW_SHOWNORMAL);
我也试过了:
ShellExecute(Handle, 'runas', 'cmd.exe', PChar('C:\Program Files\WinRAR.exe a -r -ep1 "D:\Temp\250815\GiftCard-250815-1to10.zip" "D:\Temp\250815\word"', nil, SW_SHOWNORMAL);
事实是,我真的迷路了,因为如果我进入文件夹并双击 *.bat 文件,它就可以正常工作!
但是,如果我从我的代码中执行 bat,它将不起作用。
* 编辑 *
这是 StartProcess 函数:
function TgenerateForm.StartProcess(ExeName: string; CmdLineArgs: string = ''; ShowWindow: boolean = True; WaitForFinish: boolean = False): integer;
var
StartInfo: TStartupInfo;
ProcInfo: TProcessInformation;
begin
//Simple wrapper for the CreateProcess command
//returns the process id of the started process.
FillChar(StartInfo,SizeOf(TStartupInfo),#0);
FillChar(ProcInfo,SizeOf(TProcessInformation),#0);
StartInfo.cb := SizeOf(TStartupInfo);
if not(ShowWindow) then begin
StartInfo.dwFlags := STARTF_USESHOWWINDOW;
StartInfo.wShowWindow := SW_HIDE;
end;
CreateProcess(nil,PChar(ExeName + ' ' + CmdLineArgs),nil,nil,False,
CREATE_NEW_PROCESS_GROUP + NORMAL_PRIORITY_CLASS,nil,nil,StartInfo,
ProcInfo);
Result := ProcInfo.dwProcessId;
if WaitForFinish then begin
WaitForSingleObject(ProcInfo.hProcess,Infinite);
end;
//close process & thread handles
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
请不要无礼并复制和粘贴网址。我搜索了所有的 stackoverflow 并尝试了所有“how-tos ... bat 文件”。
【问题讨论】:
-
我们不知道 StartProcess 是什么。这里不需要 shell 动词 runas。您似乎在理解上存在缺陷。反复试验不是一个好方法。慢一点。了解详情。进行调试。
-
双击bat文件和ShellExecute有什么区别?
-
不同之处在于您的代码强制使用
runas动词,而双击则会调用单击文件的默认动词。如果要使用ShellExecute()调用默认动词,请指定nil动词。 -
现在,也就是说,您已经展示了几行代码,但您还没有解释它们出了什么问题。他们没有启动 WinRAR 吗?是否报告了任何错误代码?您需要提供有关您为诊断问题所做的工作的更多详细信息,否则此讨论可能会因离题而结束。
标签: delphi batch-file command-line cmd winrar