Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Prozess Starten (https://www.delphipraxis.net/108309-prozess-starten.html)

Arnulf 25. Apr 2008 15:02

Re: Prozess Starten
 
Darf ich an der stelle einhacken und nachfragen was mit elevation gemeint ist?

Ich hab probleme mit createprocess.
manche programme lassen sich gut starten manche garnicht.

mir ist es wichtig die process id des programms zu bekommen deshalb will ich lieber creatprocess verwenden.

zum Beispiel kann ich vlc ( video lan client ) gut starten.
ein spiel (medal of honor ) funktioniert nicht.

was ist mit elevation gemeint?

SirThornberry 25. Apr 2008 15:17

Re: Prozess Starten
 
du kannst auch ShellExecuteEx verwenden wenn du einfach nur das Prozesshandle brauchst und sonst nix spezielles angeben willst.

Arnulf 26. Apr 2008 15:22

Re: Prozess Starten
 
Naja - getprocessid gibt es bei mir noch nicht ( delphi 6 )
ich glaube auch nicht, dass ich den shellexecuteinfo strukt im windows.h habe.
gut den könnte ich mir noch selbst basteln.
auch shellexecuteex gibt es noch nicht.

Vermutlich würde ich es mit etwas basteln hin bekommen aber es bedeutet für mich immer noch stress
winapi funktionen und strukts zu verwenden dich nicht gleich im header von delphi vorhanden sind.
Bin nicht so erfahren.

also hilft mir das process handle nicht viel.
lieber wäre es wenn ich gleich dirrekt die pid bekommen würde.

bisher mach ich es mit shellexecute und hol mir über den findwindowex usw. dann die pid.
bzw. über createprocess wenn es bei dem programm funktioniert.

umständlich oder nicht sicher.

trotzdem war die frage was mit elevation gemeint ist.
und sollte es noch tips geben oder jemand der für delphi6 die winapi header hat bitte antworten.

lg
Arnulf

Arnulf 5. Mai 2008 10:50

Re: Prozess Starten
 
Ich wollte nur sagen, dass ich mich geirrt habe.
shellexecuteex und auch der strukt existieren in delphi6 bereits.

nur getprocessid gibt es noch nicht.
damit habe ich alles was ich brauche.

jedenfalls würde ich ganz gerne noch wissen was es denn jetzt wirklich mit dem createprocess und der process elevation auf sich hat.
aber die frage hab ich ja schon gestellt. - wollte nur das obige relativieren.

danke
Arnulf

himitsu 5. Mai 2008 11:28

Re: Prozess Starten
 
nur nochmal kurz zu MSDN-Library durchsuchenWinExec ...
Zitat:

Das klingt für mich wie ein Verbot, wenn man das Prozesshandle nicht braucht.
ganz einfach, diese Funktion existiert nur noch zur Abwärtskompatibilität, also damit alte Win16-Programme noch laufen können.

unter Win32 gibt es ShellExecute und Co. und dieses sollte auch verwendet werden.
Zitat:

WinExec Function

Note: This function is provided only for compatibility with 16-bit Windows. Applications should use the CreateProcess function.

Elevation ... keine Ahnung, aber ich vermute mal er meint es gibt sonst Problemchen mit Privilegen/Berechtigungen.

Dezipaitor 5. Mai 2008 12:04

Re: Prozess Starten
 
Elevation: Nachträglich erhöhte Rechte für einen Prozess bekommen:
http://blog.delphi-jedi.net/2008/03/...ta-with-jwscl/

Windows Headers: http://blog.delphi-jedi.net/2007/10/...i-release-315/

himitsu 5. Mai 2008 17:55

Re: Prozess Starten
 
hab da grad was in der ShellAPI.h gefunden ... sieht doch nett aus? :gruebel:
Code:
HRESULT MyShellExec(PCWSTR pszCmd)
{
    PWSTR pszApp;
    PWSTR pszCmdLine;
    HRESULT hr = SHEvaluateSystemCommandTemplate(pszCmd, &pszApp, &pszCmdLine);
    if (SUCCEEDED(hr))
    {
        //  if this was a real template, maybe some kind of wnsprintf() first?
        SHELLEXECUTEINFOW sei = {
            sizeof(sei),          // cbSize;
            0,                    // fMask
            NULL,                 // hwnd
            NULL,                 // lpVerb
            pszApp,               // lpFile
            PathGetArgs(pszCmdLine), // lpParameters
            NULL,                 // lpDirectory
            SW_SHOWNORMAL,        // nShow
            0,                    // hInstApp
            NULL,                 // lpIDList
            NULL,                 // lpClass
            NULL,                 // hkeyClass
            0,                    // dwHotKey
            NULL,                 // hIcon
            NULL                  // hProcess
        };

        if (ShellExecuteEx(&sei))
        {
            //  we are good
            ASSERT(hr == S_OK);
        }
        else
        {
            hr = HRESULT_FROM_WIN32(GetLastError());
        }

        CoTaskMemFree(pszApp);
        CoTaskMemFree(pszCmdLine);
    }
    return hr;
}

HRESULT MyCreateProcessPriv(PCWSTR pszCmd)
{
    PWSTR pszApp;
    PWSTR pszCmdLine;
    HRESULT hr = SHEvaluateSystemCommandTemplate(pszCmd, &pszApp, &pszCmdLine);
    if (SUCCEEDED(hr))
    {
        //  if this was a real template, maybe some kind of wnsprintf() first?
        PROCESS_INFORMATION pi;
        STARTUPINFO si = {0};
        si.cb = sizeof(startup);
        si.wShowWindow = SW_SHOWNORMAL;

        if (CreateProcess(pszApp, pszCmdLine, NULL, NULL, FALSE,
                 CREATE_DEFAULT_ERROR_MODE, NULL, NULL, &si, &pi))
        {
            //  we are good
            ASSERT(hr == S_OK);
            CloseHandle(pi.hProcess);
            CloseHandle(pi.hThread);
        }
        else
        {
            hr = HRESULT_FROM_WIN32(GetLastError());
        }

        CoTaskMemFree(pszApp);
        CoTaskMemFree(pszCmdLine);
    }
    return hr;
}


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:16 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz