我有一个服务需要在将新文件复制到目录时调用批处理。我尝试使用 CreateProcess、ShellExecute、ShellExecuteEx 甚至 system。我尝试直接调用批处理,然后调用 cmd.exe
并传递 /c batchfile
作为参数...什么也没有。
我将服务设置为以管理员身份运行。我和其他用户一起尝试过。没什么。
这是 Windows 2008 服务器。
有什么想法吗? 谢谢。
最佳答案
CreateProcess ,如下面的(非常简化的)示例所示,是从服务执行批处理文件的有效方法。
STARTUPINFO si = { 0 };
PROCESS_INFORMATION pi = { 0 };
si.cb = sizeof(si);
if( !CreateProcessA( NULL,
"C:\\test.bat",
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi
) )
{
char msg[100];
sprintf( msg, "CreateProcess() failed: %d", GetLastError() );
OutputDebugStringA( msg );
}
日志记录是关键。如果批处理文件没有被执行,CreateProcess() 会告诉你原因。
您提到批处理文件将在“将新文件复制到目录时”执行。您是否确认检测代码工作正常?尝试执行批处理文件的代码是否确实达到了?
更多背景信息肯定会有所帮助。请发布批处理文件和服务代码的相关部分。
关于从 Windows 服务调用批处理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5327222/