![]() |
TService - Druckerproblem!
Hi!
Habe eine ServiceApplication, die auf D:\ eine andere Anwendung aufruft - diese MUSS folgende Sachen haben: Webcamtreiber, Münzprüfertreiber und einen DRUCKER Wenn ich den Service nun installiere, steigt es beim nä. Neustart mit "Unbekannter Softwarefehler" und "no printer selected" aus...liegt es nur am Drucker, dass er vor der Benutzeranmeldung keinen Drucker hat oder auch an Treibern für den Rest? Wie kann ich mein Problem lösen??? |
Re: TService - Druckerproblem!
Gehe in Systemsteuerung/Verwaltung/Dienste, öffne Eigenschaften deines Dienstes und setze auf der Seite "Anmelden" - "Dieses Konto" auf ein lokales Adminstrator Konto. In diesem Moment wird dein Dienst mit diesem Zugriffsrechten versehen, und kann auch auf die lokalen Drucker Resourcen zugreifen. In deinem TService gibts dafür auch im OI einstellbare Werte. Oder in deinem Dienst müsstest du mit LogOnUser & ImpersonateUser arbeiten, damit dein Dienst die entsprechenden Zugriffrechte hat. Dienste haben i.R. weniger Zugriffsrechte um auf lokale Resourcen zugreifen zu können.
Gruß hagen |
Re: TService - Druckerproblem!
Welche Werte im OI muss ich denn ändern dass das klappt? ServiceType, oder...? Habe Delphi 6...
|
Re: TService - Druckerproblem!
Probier das erstmal mit den Diensten in der Computerverwaltung aus. Falls das nämlich nicht zum Erfolg führt kann auch die Einstellungen beim TService im OI nichts bringen.
Zb. Service.ServiceStartName := 'Administrator'; Service.Passwort := 'Kennwort'; D.h. man gibt den Account ein. Gruß Hagen |
Re: TService - Druckerproblem!
habs jetzt probiert mit Account eingeben, er bringt mir"Kontenname nicht vorhanden oder pw falsch" - das stimmt nicht, so hab ich mich doch angemeldet....werde noch das andere probieren...
|
Re: TService - Druckerproblem!
Jetzt sitz ich in der Zwickmühle - dein Tip, den Dienst mit Administrator auszuführen führt zu folgendem: nichts passiert, Disco.exe läuft, aber ich sehe nix! (Also wohl wieder interactive auf False, oder?)
Das von Hand eintragen bringts nicht, da er rummeckert dieses Konto gäbe es nicht... und ohne alles eben Programmabsturz! |
Re: TService - Druckerproblem!
Bei der Konto-Auswahl hast due mit "Durchsuchen" gearbeitet ??
Falls ja so solltest du gesehen haben das der Kontoname für "Administrator" so aussieht -> ".\Administrator". Bei mir funktioniert das alles. Gruß Hagen |
Re: TService - Druckerproblem!
Das hat er automatisch gemacht! So gehts auch direkt im Service es reinzuschreiben, aber wie man da sieht ändert sich dann automatisch das INTERACTIVE auf FALSE, und so sehe ich mein externes Programm mit dem Form nicht!!!
|
Re: TService - Druckerproblem!
Wieso ? vorher Interactive = True, dies beleibt dann erhalten, da ein Dienst angemeldet auf einem anderen Konto immer interaktiv ist. (soviel ich weiß, am besten mal Assarbad fragen der kennt sich da besser aus)
Gruß Hagen |
Re: TService - Druckerproblem!
ja, aber alles vrehält sich so, als wäre es nicht inactive! Mein Programm läuft (ohne Probleme) allerdings nur im TaskManager - ich seh es nicht, liegts an wsMaximized? Auf jeden Fall seh ich NIX....das is ja das Problem!
|
Re: TService - Druckerproblem!
Eine Bemerkung noch: einen Service zu schreiben der Interaktiv ist, ist im grunde schwachsinnig. Interaktive Services unterwandern den eigentlichen Sinn von Services und somit auch die Sicherheit. Sie sind im Grunde schlimmer, eg. unsicherer, als normale Anwendungen.
Einen interaktiven Service kannste auch als normale Anwendung programmieren, und dies wäre dann vom Sicherheitskonzept sinnvoller und erspart dir viel Arbeit. Normalerweise sollte ein Service nicht interaktiv sein, und falls notwendig wird eine zweite Anwendung installiert die dann die Informationen zum Service anzeigen und ändern kann. Gruß Hagen |
Re: TService - Druckerproblem!
brauch aber ne gute Lösung um ein externes Programm VOR allem anderen zu starten - dass man nicht auf die TaskBar kommt...
|
Re: TService - Druckerproblem!
Dein TForm sollte in TService.OnExecute() erzeugt und auch wieder freigegeben werden. Bedenke in Serives ist alles Thread-basiert.
Gruß Hagen |
Re: TService - Druckerproblem!
das ist bisher so:
Code:
procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
var ProcID: PCardinal; begin RunProcess(ExtractFilePath(ParamStr(0)) + 'Disco.exe', SW_MINIMIZE, TRUE, ProcID); end; function TService1.RunProcess(FileName: string; ShowCmd: DWORD; wait: Boolean; ProcID: PCardinal): Longword; var StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; begin FillChar(StartupInfo, SizeOf(StartupInfo), #0); StartupInfo.cb := SizeOf(StartupInfo); StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK; StartupInfo.wShowWindow := ShowCmd; if not CreateProcess(nil, @Filename[1], nil, nil, False, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then Result := WAIT_FAILED else begin if wait = FALSE then begin if ProcID <> nil then ProcID^ := ProcessInfo.dwProcessId; exit; end; WaitForSingleObject(ProcessInfo.hProcess, INFINITE); GetExitCodeProcess(ProcessInfo.hProcess, Result); end; if ProcessInfo.hProcess <> 0 then CloseHandle(ProcessInfo.hProcess); if ProcessInfo.hThread <> 0 then CloseHandle(ProcessInfo.hThread); end; dai ich ja kein form anzeigen will, sondern ein Programm starte... |
Re: TService - Druckerproblem!
weiß keiner woran es liegen könnte?
|
Re: TService - Druckerproblem!
weiß keiner woran es liegen könnte?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:17 Uhr. |
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