Pipe schließen



  • Hallo,

    ich habe unter Dos folgendes Problem.

    Ich möchte gerne eine Pipe schließen nachdem ein Prozess beendet wird, jedoch bekomme ich andauernd die Meldung wenn ich Strg + C drücke:

    Ein Prozess hat versucht, zu einer nicht bestehenden Pipe zu schreiben.

    Jetzt könnte man mit

    exit
    

    den Prozess beenden. Jedoch kriege ich es nicht hin den Prozess zu beenden.

    Mein Batchprogramm lautet so:

    cmd /k net statistics server | find "Statistik" > "C:\Dokumente und Einstellungen\Name\Desktop\out.txt" 
    exit
    

    Ich muss aber jedesmal manuell exit eingeben. Kann man das automatisieren?

    Eigentlich war die Grundidee ein Programm was ähnlich unter Linux dem Befehl

    uptime
    

    ist. Also direkt die Zeit ausrechnet, an der man am Rechner sitzt. Jedoch kriege ich es nicht so ganz umgesetzt.

    Danke



  • Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole in das Forum Themen rund um den PC verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • upstalsboom schrieb:

    Eigentlich war die Grundidee ein Programm was ähnlich unter Linux dem Befehl uptime ist. Also direkt die Zeit ausrechnet, an der man am Rechner sitzt.

    Warum machst Du das dann nicht ?

    Google sagt:
    http://www.codeguru.com/forum/archive/index.php/t-304599.html

    Habs mit VS2010 kompiliert; scheint ganz gut zu funktionieren.

    typedef LONG (WINAPI *pNtQuerySystemInformation)(UINT,PVOID,ULONG,PULONG);
    
    typedef struct _SYSTEM_TIME_OF_DAY_INFORMATION 
    {
    LARGE_INTEGER BootTime;
    LARGE_INTEGER CurrentTime;
    LARGE_INTEGER TimeZoneBias;
    ULONG CurrentTimeZoneId;
    } SYSTEM_TIME_OF_DAY_INFORMATION, *PSYSTEM_TIME_OF_DAY_INFORMATION;
    
    BOOL GetUpTime(SYSTEMTIME *pstBootTime)
    {
    pNtQuerySystemInformation pfNtQuerySystemInformation;
    SYSTEM_TIME_OF_DAY_INFORMATION SysTimeInfo;
    FILETIME ftBootTime;
    
    pfNtQuerySystemInformation = (pNtQuerySystemInformation)
    GetProcAddress(GetModuleHandle(_T("ntdll")),"NtQuerySystemInformation");
    
    if(!pfNtQuerySystemInformation)
    return FALSE;
    
    if(pfNtQuerySystemInformation(3,&SysTimeInfo,sizeof(SysTimeInfo),0) != NO_ERROR)
    return FALSE;
    
    ftBootTime = *(FILETIME *)&(SysTimeInfo.BootTime);
    FileTimeToLocalFileTime(&ftBootTime,&ftBootTime);
    FileTimeToSystemTime(&ftBootTime,pstBootTime);
    return TRUE;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
      DWORD seconds;
      SYSTEMTIME stBootTime;
    
      if(GetUpTime(&stBootTime)) {
        	_tprintf(
    	_T("System Uptime: %d/%d/%d %d:%d:%d\n"),
    	stBootTime.wMonth,
    	stBootTime.wDay,
    	stBootTime.wYear,
    	stBootTime.wHour,
    	stBootTime.wMinute,
    	stBootTime.wSecond);
    	}
    
      return 0;
    }
    


  • ich hab kein vs2010 installiert, zu faul, bei so einer langen installation..

    wollte mit batchprogrammierung ein bischen übung bekommen

    danke für den ansatz


Anmelden zum Antworten