哪位大虾用过CREATEPROCESS,请可小弟指点一下,必定给分。

xuxia 2002-01-08 02:35:17
procedure TForm1.Button1Click(Sender: TObject);
var stinfo:STARTUPINFO;
var stucinfo:PROCESS_INFORMATION ;
begin
stinfo.cb:=sizeof(stinfo);
CreateProcess(nil,'D:\CCINstall\callissue\setup.exe',0,0,True,NORMAL_PRIORITY_CLASS,0,0,stinfo,stucinfo);
Waitforsingleobject(stucinfo.hProcess,INFINITE);
CloseHandle(stucinfo.hProcess);
end;
...全文
78 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuxia 2002-01-08
  • 打赏
  • 举报
回复
to:Crob
我加了下面一句就成功了。为什么?字符串常量一定要变成CHAR数组吗?还是因为要加一个空终止符号,DELPHI中怎么在字符串常量后面加空终止符号。
StrPCopy(zAppName,'d:\ccinstall\callissue\setup.exe');
Crob 2002-01-08
  • 打赏
  • 举报
回复
CreateProcess(nil,'D:\CCINstall\callissue\setup.exe',0,0,True,NORMAL_PRIORITY_CLASS,0,0,stinfo,stucinfo);

应该把程序路径放在第一个参数

CreateProcess('D:\CCINstall\callissue\setup.exe',nil,0,0,True,NORMAL_PRIORITY_CLASS,0,0,stinfo,stucinfo);
Crob 2002-01-08
  • 打赏
  • 举报
回复
VB我不熟,可能是一些系统常量定义不一样吧
cszhz 2002-01-08
  • 打赏
  • 举报
回复
学习
^_^
xuxia 2002-01-08
  • 打赏
  • 举报
回复
谢谢你。
不过想问您一下,我的代码错在哪里呢?VB中可以这样调用的。而且成功了。
Crob 2002-01-08
  • 打赏
  • 举报
回复
下面程序会调用相应程序,并一直等该程序执行完后再继续下去
参数:FileName应用程序路径和名称
Visibility应用程序显示属性

function WinExecAndWait32(FileName:String; Visibility :integer):integer;
//调用其它程序并等待
var
zAppName:array[0..512] of char;
zCurDir:array[0..255] of char;
WorkDir:String;
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
begin
StrPCopy(zAppName,FileName);
GetDir(0,WorkDir);
StrPCopy(zCurDir,WorkDir);
FillChar(StartupInfo,Sizeof(StartupInfo),#0);
StartupInfo.cb := Sizeof(StartupInfo);

StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
if not CreateProcess(nil,
zAppName, { pointer to command line string }
nil, { pointer to process securityattributes }
nil, { pointer to thread securityattributes }
false, { handle inheritance flag }
CREATE_NEW_CONSOLE or { creation flags }
NORMAL_PRIORITY_CLASS,
nil, { pointer to new environment block }
nil, { pointer to current directory name }
StartupInfo, { pointer to STARTUPINFO }
ProcessInfo) then Result := -1 { pointer to PROCESS_INF }

else begin
WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
// GetExitCodeProcess(ProcessInfo.hProcess,Result);
end;
end;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧