c++ - 打开几个文件,等待约 30 分钟,用 C++ 重新启动它们

标签 c++

我发布了一个关于如何批量执行此操作的主题,但事实证明批处理脚本不是很流行,我几乎不知道它,所以现在我请求你用 C++ 来帮助执行此操作。

这是我尝试过的

#include <Windows.h>
using namespace std;

void openBat(char* path) {
    system(path);
}

int main() {
    for(;;) {
    openBat("C:\\Users\\Ivan\\Desktop\\folder\\run.bat");
    Sleep(1800000);
    //kill opened process
    }
    return 0;
}

我不确定如何终止打开的进程,因为每次我运行 bat 脚本时它都会有一个新的 ID,我不能按名称终止,因为我需要打开其中的 4 个。感谢所有帮助。

最佳答案

你在那里做的并不是真正的 C++。您基本上是在使用 Windows 来解释传递给它的命令,就像批处理一样。这是您想在 C++ 中执行的操作,即使它仅在 Windows 上运行也是如此。

#include <Windows.h>
#include <string>

std::wstring GetEnvString()
{
    wchar_t* env = GetEnvironmentStrings();
    std::wstring result{ env };
    FreeEnvironmentStrings(env);
    result.push_back('\0');
    return result;
}

int main()
{
    //Setup needed structures
    STARTUPINFO si{ sizeof si };
    PROCESS_INFORMATION pi;

    //Command line (read- and writeable)
    wchar_t cmd[] = L"cmd.exe /C C:\\Users\\Ivan\\Desktop\\folder\\run.bat";

    //Create process
    CreateProcess(nullptr, cmd, nullptr, nullptr, false, CREATE_UNICODE_ENVIRONMENT, 
        const_cast<wchar_t*>(GetEnvString().c_str()), nullptr, &si, &pi);

    Sleep(1800000);

    //Process Termination
    TerminateProcess(pi.hProcess, 0);   

    // Close process and thread handles. 
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
}

我建议您阅读 CreateProcess函数,以及 Terminate Process一。还有一个 example from Microsoft关于如何使用两者的前者。希望这些信息对您有所帮助。

编辑:固定内容。现在应该工作了。感谢用户 4581301,他的链接非常有用。

关于c++ - 打开几个文件,等待约 30 分钟,用 C++ 重新启动它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38544944/

相关文章:

c++ - 我如何相应地构造代码(在 header 和源文件中),这样我就不会出现编译器和链接器错误?

c++ - g++ ifstream匹配错误

c++ - boost hash 为不同的输入返回相同的值

c++ - 如何正确调整 QGraphicsView 的大小?

c++ - 为什么不能同时定义两个指针?

C++为什么结构对象值在循环结束时重置回零

c++ - 比较c++中对象实例的内存地址

C++静态变量

c++ - 如何将 "safely"文件夹删除到回收站

c++ - Qt 在运行时更改对话框的模式,而不是第一次隐藏它而不是显示