Visual c++ 如何在visualc++;

Visual c++ 如何在visualc++;,visual-c++,c++-cli,Visual C++,C++ Cli,因此,我正在编写一个程序,从附近的目录中启动一些可执行文件,其目标之一是使这些可执行文件保持活动状态,因此我做了以下工作: private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { Environment::CurrentDirectory = somedir; Process::Start("some.exe"); Environment::CurrentDirectory

因此,我正在编写一个程序,从附近的目录中启动一些可执行文件,其目标之一是使这些可执行文件保持活动状态,因此我做了以下工作:

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
 Environment::CurrentDirectory = somedir;
 Process::Start("some.exe");
 Environment::CurrentDirectory = "../";
}
此按钮的目标是启动进程,some.exe,然后我使用由复选框触发的计时器,以开始检查进程是否仍处于活动状态,如果没有,则启动它。我使用复选框来保持此功能的可选性。因此,计时器代码如下:

//this timer is triggered using a checkbox.
private: System::Void timer_Tick(System::Object^  sender, System::EventArgs^  e) {
 if () //Im stuck here,..
 {
 /*and here is stuff i do if the above 'if' statement 
 says the program is no longer running. In this case,
 I rerun the executable.*/
 Environment::CurrentDirectory = somedir;
 Process::Start("some.exe");
 Environment::CurrentDirectory = "../";
 }
}
我被困在这里,四处搜索,找到了像WaitForSingleObject()OpenProcess+GetExitCodeProcess这样的方法,但我无法理解它们的实现方式

现在我需要做的是使用if语句来检查进程是否处于活动状态,并对其采取措施,在本例中,再次启动它。我正在使用计时器每5秒重复一次检查

如果这个问题看起来太离谱,我很抱歉,但我在这里真的很挣扎,主要原因是我依赖于我找到的示例来学习代码,并且不知道从a到z学习这种语言的正确来源。更确切地说,我不知道我到底在寻找什么。非常感谢您的帮助。

我相信您需要帮助

其他说明:

  • 这两种方法之间有共同的代码。拥有一个助手方法
    StartSomeDotExe()
    是有意义的
  • 如果
    Some.exe
    已经在运行,我怀疑您是否希望启动第二个副本。因此,我将helper方法切换到
    StartSomeDotExeIfNeeded()
    ,并从两个事件处理程序调用它
  • 您无需更改应用程序的工作目录即可从该目录运行另一个应用程序。您可以使用设置新进程的工作目录
  • 您可以完全放弃计时器并使用事件。在启动进程之前订阅该事件,进程一退出就会调用您
查看上面的帖子,我在我原来的帖子之后更正了一对打字错误:
。haseExitd
应该是
->haseExitd
,因为
过程
是一个参考类型,而不是值类型。出于同样的原因,
proc
应该声明为
Process^
,带有一个
^
。它就像一个符咒,非常感谢,你太棒了:)
private: Process^ proc;

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
    Environment::CurrentDirectory = somedir;
    this->proc = Process::Start("some.exe");
    Environment::CurrentDirectory = "../";
}

private: System::Void timer_Tick(System::Object^ sender, System::EventArgs^ e)
{
    if (this->proc->HasExited)
    {
        Environment::CurrentDirectory = somedir;
        this->proc = Process::Start("some.exe");
        Environment::CurrentDirectory = "../";
    }
}