Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Showmessage in Service aufrufen (https://www.delphipraxis.net/38588-showmessage-service-aufrufen.html)

kobel 21. Jan 2005 13:04


Showmessage in Service aufrufen
 
Hallo,

ich möchte aus einem Service Meldungsfenster aufrufen
z.B. showmessage('hallo')

warum geht das nicht ?

DANKE kobel

Bernhard Geyer 21. Jan 2005 13:10

Re: Showmessage in Service aufrufen
 
Unter welchem Konto läuft der Dienst bzw. ist Datenaustausch zwischen Dienst und Desktop erlaubt.

Falls unabhängig vom Angemeldeten Benutzer die interaktion mit dem Desktop ermöglicht werden soll, so mußt Du 2 Programme schreiben: Eines ist der Dienst und einer ist für die Anzeige auf dem Desktop zuständig.

kobel 21. Jan 2005 13:18

Re: Showmessage in Service aufrufen
 
Zitat:

Unter welchem Konto läuft der Dienst bzw. ist Datenaustausch zwischen Dienst und Desktop erlaubt.
Wie kann ich das herausfinden ?


Der Dienst soll Abfragen aus einer Datenbank machen und unter bestimmten Bedingung nur eine Meldung anzeigen die dann vom Benutzer einfach weggeclickt werden kann

sakura 21. Jan 2005 13:21

Re: Showmessage in Service aufrufen
 
Zitat:

Zitat von Bernhard Geyer
Falls unabhängig vom Angemeldeten Benutzer die interaktion mit dem Desktop ermöglicht werden soll, so mußt Du 2 Programme schreiben.

Nicht unbedingt, solange Du nicht auf Terminal Clients arbeitest, ist folgende Lösung ganz einfach: MessageBox aus non-interactive Anwendungen

...:cat:...

Bernhard Geyer 21. Jan 2005 13:22

Re: Showmessage in Service aufrufen
 
Zitat:

Zitat von kobel
Wie kann ich das herausfinden ?

Geh in die Liste der Dienste (je nach BS-Version an unterschiedlichen Stellen zu finden) und dort einfach doppelklick, Reiterseite Anmelden.

Luckie 21. Jan 2005 13:28

Re: Showmessage in Service aufrufen
 
Zitat:

Zitat von kobel
Hallo,

ich möchte aus einem Service Meldungsfenster aufrufen
z.B. showmessage('hallo')

warum geht das nicht ?

Weil der Dienst in einer anderen WindowStation läuft und so keinen Zugriff auf den Desktop des angemeldeten Benutzers hat. Um nun mit den angemeldeten Benutzer interagieren zu können, muss der Dienst die interaktive WindowStation öffnen (WinSta0) und den standard Deskotp ("Default"). Wie das geht zeigt folgender C-Quellcode aus dem PSDK:
Code:
DWORD dwGuiThreadId = 0;
 
int
UserMessageBox( 
    RPC_BINDING_HANDLE h,
    LPSTR lpszWindowStation,
    LPSTR lpszDesktop,
    LPSTR lpszText,
    LPSTR lpszTitle,
    UINT fuStyle)

    DWORD dwThreadId;
    HWINSTA hwinstaSave;
    HDESK hdeskSave;
    HWINSTA hwinstaUser;
    HDESK hdeskUser;
    int result;
 
    // Ensure connection to service window station and desktop, and
    // save their handles.

    GetDesktopWindow();
    hwinstaSave = GetProcessWindowStation();
    dwThreadId = GetCurrentThreadId();
    hdeskSave = GetThreadDesktop(dwThreadId);
 
    // Impersonate the client and connect to the User's
    // window station and desktop.

    RpcImpersonateClient(h);
    hwinstaUser = OpenWindowStation(lpszWindowStation, FALSE, MAXIMUM_ALLOWED);
    if (hwinstaUser == NULL)
    { 
        RpcRevertToSelf();
        return 0;
    } 
    SetProcessWindowStation(hwinstaUser);
    hdeskUser = OpenDesktop(lpszDesktop, 0, FALSE, MAXIMUM_ALLOWED);
    RpcRevertToSelf();
    if (hdeskUser == NULL)
    { 
        SetProcessWindowStation(hwinstaSave);
        CloseWindowStation(hwinstaUser);
        return 0;
    } 
    SetThreadDesktop(hdeskUser);
 
    // Display message box.

    dwGuiThreadId = dwThreadId;
    result = MessageBox(NULL, lpszText, lpszTitle, fuStyle);
    dwGuiThreadId = 0;
 
    // Restore window station and desktop.

    SetThreadDesktop(hdeskSave);
    SetProcessWindowStation(hwinstaSave);
    CloseDesktop(hdeskUser);
    CloseWindowStation(hwinstaUser);
 
    return result;
}

kobel 21. Jan 2005 13:39

Re: Showmessage in Service aufrufen
 
@Bernhard Geyer:
Lokales Konto, kein Datenaustausch mit Desktop.

@sakura:
habs probiert: beim Starten des Dienstes kommt Fehlermeldung

@lucki:
wo binde ich das ein ? oder ist das eine procedure ?
(verstehe garnicht was da gemacht wird!!!)

sakura 21. Jan 2005 13:43

Re: Showmessage in Service aufrufen
 
Zitat:

Zitat von kobel
@sakura:
habs probiert: beim Starten des Dienstes kommt Fehlermeldung

Was für eine Fehlermeldung - ich habe diese Funktion über zwei Jahre zum Debuggen genutzt, heute mache ich es über Pipes :-)

...:cat:...

kobel 21. Jan 2005 13:47

Re: Showmessage in Service aufrufen
 
Fehler:
Der Dienst konnte nicht gestartet werden.
Der Dienst hat keinen Fehler zurückgegeben. Es kann sich um einen internen Windowsfehler oder einen internen Dienstfehler handeln.

sakura 21. Jan 2005 13:50

Re: Showmessage in Service aufrufen
 
Könnte das an etwas anderem liegen? Das Beispiel setzt einfach auf der MessageBox von MS Windows auf :? Auf jeden Fall macht es keinen Sinn an der Stelle. Setze die mal in einen neuen, leeren NT Service, der sollte gehen.

...:cat:...


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:13 Uhr.
Seite 1 von 2  1 2      

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