2016-07-23 5 views
1

Ich postete einen Thread darüber, wie dies im Batch zu tun, aber es stellt sich heraus, Batch-Skripting ist nicht sehr beliebt und ich weiß es kaum noch so jetzt bin ich in C++ um Hilfe bitten.Öffnen Sie ein paar Dateien, warten ~ 30 Minuten, starten Sie sie wieder in C++

hier ist, was ich versuchte

#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; 
} 

Ich bin nicht sicher, wie der geöffneten Prozess zu töten, weil jedes Mal, wenn ich den Fledermaus-Skript ausführen es eine neue ID hat, und ich kann mit Namen, weil ich nicht töten müssen 4 davon geöffnet haben. Alle Hilfe wird geschätzt.

+0

'Ich habe einen Thread darüber geschrieben, wie man das in Batch macht. Könnten Sie einen Link dazu geben? Außerdem werden "Threads" normalerweise als "Fragen" auf Stack Overflow bezeichnet. – dorukayhan

+0

Entschuldigung, ich habe es gelöscht, da war nur wie 2 Antworten und ich konnte sie nicht verstehen –

+2

Ehm, das ist nicht wirklich Grund, es zu löschen –

Antwort

0

Was Sie tun es nicht wirklich C++. Sie verwenden im Grunde Fenster, um die Befehle zu interpretieren, die Sie wie Batch ausführen. Hier ist, was Sie in C++ tun möchten, auch wenn es nur unter Windows läuft.

#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); 
} 

Ich würde empfehlen, Sie auf der CreateProcess Funktion lesen, sowie die Terminate Process ein. Es gibt auch eine example from Microsoft über, wie man das ehemalige der zwei benutzt. Ich hoffe diese Information kann dir helfen.

bearbeiten: Fixed Zeug. Sollte jetzt funktionieren. Dank an User4581301, seine Links waren wirklich nützlich.

0

Wenn Sie einen Prozess zu erstellen, halten auf den Prozess Griff und mit dem Griff die beenden, wenn Sie fertig sind. Mit dem Griff wissen Sie genau, welche von möglicherweise Tausenden von Instanzen des gleichen Prozesses Sie tot wollen.

Hinweis: Die Beendigung eines Prozesses kann zu unerwünschten Ergebnissen führen. Sie sind fast immer besser dran, die Prozesse so zu schreiben, dass Sie ihnen Nachrichten schicken können, und sie bitten, dass sie sich höflich abmelden. Wie würden Sie das mit einer Batch-Datei machen? Schlumpfte, wenn ich es weiß. Jemand anderes könnte eine bessere Antwort auf dieses Problem haben, und mir geht es gut. Eines Tages könnte ich diese bessere Lösung brauchen.

Unter Windows möchten Sie wahrscheinlich CreateProcess und TerminateProcess.

eine Batch-Datei mit Createprocess Laufen ist hier abgedeckt: Use CreateProcess to Run a Batch File

einen Prozess mit Create Prozess gestartet wird, beenden hier abgedeckt: how to terminate a process created by CreateProcess()?

Verwandte Themen