ShellExecute



  • Ist es möglich, nach dem Aufruf eines Windows-Befehls wie "cacls" mit ShellExecute die zurückgegebenen Daten zu verarbeiten? Also wenn ich z.B. die Zugriffberechtigung von irgendweinem Verzeichnis mit cacls abfragen will, und die Ergebnisse in meinem Programm verarbeiten will, wie kann ich das machen?

    Besser wäre es allerdings noch, wenn es eine Möglichkeit gäbe, Zugriffsrechte direkt über die MFC abzufragen und zu bearbeiten, dann müsste ich gar nicht den Weg über cacls gehen.

    Kann mir jemand helfen?

    Danke



  • flash2 schrieb:

    Ist es möglich, nach dem Aufruf eines Windows-Befehls wie "cacls" mit ShellExecute die zurückgegebenen Daten zu verarbeiten?

    cacls > result.txt



  • result.txt? Wie meinst du das?



  • flash2 schrieb:

    Besser wäre es allerdings noch, wenn es eine Möglichkeit gäbe, Zugriffsrechte direkt über die MFC abzufragen und zu bearbeiten, dann müsste ich gar nicht den Weg über cacls gehen.

    ich glaube mit mfc geht's nicht aber es gibt ja die win32 security apis
    beispiel: http://www.devx.com/cplus/Article/16711/1954



  • flash2 schrieb:

    result.txt? Wie meinst du das?

    #include <windows.h>
    #include <fstream>
    #include <iostream>
    
    bool exec(LPCTSTR &commandLine);
    
    int main(int argc, char* argv[]) 
    { 	
    	const TCHAR * commandLine = TEXT("cacls > result.txt");	
    
    	if(exec(commandLine))
    	{
    		std::ifstream is("result.txt");
            if(is)
    		{
    			std::cout << is.rdbuf();
    		}
    	}
    }
    
    bool exec(LPCTSTR &commandLine)
    {
    	STARTUPINFO si;
    	ZeroMemory(&si, sizeof(si));
    	si.cb = sizeof(si);
    
    	PROCESS_INFORMATION pi;
    
    	BOOL bRes = CreateProcess(
    		NULL, const_cast<LPSTR>(commandLine), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
    
    	if(!bRes){
    		return false;
    	}
    
    	WaitForSingleObject(pi.hProcess, INFINITE);
    
    	DWORD dwExitCode;
    	bRes = GetExitCodeProcess(pi.hProcess, &dwExitCode);
    
    	// Close process and thread handles. 
    	CloseHandle( pi.hProcess );
    	CloseHandle( pi.hThread );
    
    	return true;
    }
    


  • Danke Leute, ihr habt mir sehr geholfen!


Anmelden zum Antworten