从 Windows 服务调用批处理文件

标签 c windows service

我有一个服务需要在将新文件复制到目录时调用批处理。我尝试使用 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/

相关文章:

C - 队列未正确存储值

windows - 暂时打开回声

mysql - Perl DBI 模块中的操作失败未指示错误

c# - 服务耗尽 TCP 连接

android - 通知未在 android 中启动 Activity

c - 在c中增加 union 数据

c - 堆排序适用于字符串,但不适用于整数

将 ASCII 转换为十六进制,反之亦然 - 奇怪的问题

windows - 使用 DirectX 的 g++ 窗口?

web-services - 我们如何使用有规则的服务