NT 服务的 CreateProcess 挂起

Posted

技术标签:

【中文标题】NT 服务的 CreateProcess 挂起【英文标题】:CreateProcess from NT service hangs 【发布时间】:2010-04-20 14:26:54 【问题描述】:

我正在尝试从 NT 服务进程启动 SQLServer2008SP1 express 安装程序。进程启动成功,我可以在任务管理器中看到它,但它什么也没做,只是保持不活动,直到我杀了他。

我正在使用以下命令开始该过程:

 szCmdLine = "Setup.exe /Q /HIDECONSOLE /ACTION=install /CONFIGURATIONFILE=ConfigurationFile.ini /SAPWD=pwd_to_set");

 STARTUPINFO si;
 si.wShowWindow = SW_HIDE;
 ...
 CreateProcess(NULL, szCmdLine, NULL, NULL, TRUE, 
               CREATE_NO_WINDOW, NULL, szPath, &si, &pi);

从 cmdline 手动启动时安装正常。

我尝试为进程使用各种 creat 标志,但没有运气。我的想法已经用完了,因此感谢您的每一个帮助。

请注意,对于 SQL Server 2000 安装,相同的代码也可以正常工作。而且我知道这是处理安装的一种奇怪方式,但要改变它为时已晚。

操作系统是 Windows Server 2003 SP2。

【问题讨论】:

什么操作系统? Windows Server 2003 还是 Windows Server 2008? 【参考方案1】:

回复自己,仅供参考。 问题是调用了错误的 Setup.exe。虽然 szPath 指向了正确的文件夹,但调用了 windows 文件夹中的 Setup.exe。

修复方法是使用全名(包括目录)调用 Setup.exe。

【讨论】:

以上是关于NT 服务的 CreateProcess 挂起的主要内容,如果未能解决你的问题,请参考以下文章

启动特定子进程后挂起进程

Process.Start 功能

Delphi - 优雅地关闭服务中创建的进程。 (使用 tprocess / createProcess)

傀儡进程脱壳三步曲

Ring3挂起进程,跟恢复进程.

CreateProcess 和奇怪的 nslookup 错误