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()
- 如果
已经在运行,我怀疑您是否希望启动第二个副本。因此,我将helper方法切换到Some.exe
,并从两个事件处理程序调用它李>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 = "../";
}
}