Hi,
ich habe Windows 8.1 und mir einen Windows Service programmieren lassen.
Dieser Service lädt von meiner Webseite alle 30 Sekunden einen Messwert.
Wenn ich Ihn per doppelklick starte, öffnet sich ein dos-Fenster und ich
sehe, wie die Daten heruntergeladen werden.
Wenn ich nun diesen wieder schließe, per cmd in den entsprechenden
Ordner wechsle und dort den Namen des Service gefolgt von install
eingebe, so kann ich diesen dann im "Services" Fenster sehen und
neustarten.
Leider lädt er aber keine Daten herunter, sondern gibt nur folgende
Zeile aus:
2015-10-30 15:44:55 No data.
2015-10-30 15:44:59 Failed to get value
Unable to connect to the remote server
2015-10-30 15:44:59 No data.
The Data-Files are empty.
Beim Entwickler habe ich nachgefragt warum und weshalb das so sein kann
und dieser zeigte mir nur, dass bei ihm alles wie gewünscht funktioniert
- weiß aber auch keine Lösung.
Kann sich hier wer vorstellen warum sowas so sein kann bzw. wie ich es
anstelle, damit er auch im Hintergrund läuft?
sunshineh schrieb:> in den entsprechenden Ordner wechsle und dort gehts
Dann ist wahrscheinlich der Pfad nicht bekannt?
Auch mal Rechte genauer ansehen.
Wo gibt der Service seine Meldungen denn aus? Auf irgendeiner Konsole
kann er nichts ausgeben. Wenn er das tut, läuft er nicht als Service.
Stehen irgendwelche Meldungen zum Thema im Event Log?
Die Selbstinstallation eines Service funktioniert nicht mehr so wie
"früher", Deine Angaben deuten darauf hin, das hier genau dieses Problem
vorliegt.
"Bei mir gehts" als einzige Reaktion eines Entwicklers bedeutet exakt
"ich habe da irgendwas zusammengeschrummelt, ohne es zu verstehen, also
laß mich in Ruhe".
Also wenn ich mir die Properties des Services ansehe, so steht dort
unter
"Log On", "Local System account" aber der Haken bei
"Allow services to interact with dektop" ist draußen.
sunshineh schrieb:> aber wie mache ich das?
Administrative Tools
Computer Management
Services and Applications
Services
(DeinService)
RightClick - Properties
Der "Local System Account" kann natürlich auf's Netzwerk zugreifen, aber
NICHT auf Netzwerklaufwerke.
Und "Allow service to interact with desktop" erlaubt natürlich keine
Konsolenausgaben.
Der Service schreibt eigentlich in ein txt.
Nur wenn ich auf ihn Doppelklicke sehe ich die Konsole und das er Daten
herunterlädt.
Wie installiert ma den Service den richtig?
sunshineh schrieb:> Nur wenn ich auf ihn Doppelklicke sehe ich die Konsole und das er Daten
herunterlädt.
Du meinst, wenn Du ihn im Windows Explorer doppelklickst? Naja, dann
läuft er NICHT als Service, sondern als normales Konsolenprogramm.
> Wie installiert ma den Service den richtig?
Mit dem zum Service mitgelieferten Installer.
Installer ist leider keiner dabei.
Wenn die exe als Konsolenprogramm läuft, dann müsste sie ja auch als
service laufen, oder?
Ich bin eigentlich als Benutzer am pc angemeldet, sage aber bem
cmd-Aufruf, als Administrator ausführen.
woran kann ich bei einem Dienst erkennen, ob er ins Internet darf oder
nicht?
sunshineh schrieb:> Installer ist leider keiner dabei.
Lustig. Und was meint der Entwickler, wie Du ihn dann installieren
sollst?
> Wenn die exe als Konsolenprogramm läuft, dann müsste sie ja auch als> service laufen, oder?
Nein. "Früher" konnte man einen Service so schreiben, das er sich quasi
"selbst" installiert - aber spätestens seit Win7 geht das nicht mehr.
Dödel schrieb:> Unter welchem Account läuft der Dienst. Normalerweise hat LocalService> keinen Zugriff aufs Netzwerk.> Starte diesen mit einem Useraccount.
das ist nicht richtig.
Als LocalService hat er kein zugriff auf Freigaben, aber
Sockets/Netzwerk geht ohne Probleme.
Das kann also nicht das Problem sein.
Dauergast schrieb:> Nein. "Früher" konnte man einen Service so schreiben, das er sich quasi> "selbst" installiert - aber spätestens seit Win7 geht das nicht mehr.
Natürlich geht das. Die Selbstinstallation erfordert
Administratorrechte, und einen Kommandozeilenparameter zum Unterscheiden
zwischen Aufruf durch SCM und Kommandozeile. Da hat sich nichts
geändert, das geht auch auf 2012 Server R2 immer noch genau so.
Rufus Τ. F. schrieb:> das geht auch auf 2012 Server R2 immer noch genau so
Du hast Recht ... funktioniert immer noch auf W8.1/64 und W10. Auf
Kommentare im Source ist also auch kein Verlass mehr :(
Also nochmal zum Verständnis für mich.
Der Service funktioniert an sich, dass sehe ich wenn ich es per
Doppelklick auf die exe als Konsolenanwendung ausführe. Er kommt ganz
normal ins Internet und ich muss ihn nirgends freischalten.
Wenn ich ihn installiere gehe ich so vor. Ich starte cmd als
Administrator, gehe in den entsprechenden Ordner und sage den exe Namen
führt von install.
Dann öffne ich Services.msc als User, nicht als Admin, gehe auf den
Service und auf "Start", ich bekomme keine weitere Meldung einer
Firewall oder ähnlichen, nur vom Programm die Info, dass er den
Remote-Server nicht connecten kann.
Für mich heißt dass doch, dass ich durch die Installation nicht auf die
selben Sachen zugreifen kann, wie durch den Start als Konsolenanwendung.
Avast und McAfee habe ich testweise deaktiviert, doch das hat nichts
geholfen.
Wie kann ich nun feststellen, warum der Dienst nicht läuft?
sunshineh schrieb:> Für mich heißt dass doch, dass ich durch die Installation nicht auf die> selben Sachen zugreifen kann, wie durch den Start als Konsolenanwendung.
Dann starte den Dienst doch mal testhalber mit deinem eigenen Userkonto.
Georg
sunshineh schrieb:> Der Service funktioniert an sich, dass sehe ich wenn ich es per> Doppelklick auf die exe als Konsolenanwendung ausführe. Er kommt ganz> normal ins Internet und ich muss ihn nirgends freischalten.
Dann läuft das Ding aber nicht als Service ("Dienst"), sondern als
stinknormales Programm. Und das tut es in dem Benutzerkonto, in dem Du
gerade angemeldet bist.
Wenn Du es als Dienst installierst, läuft es in einem anderen
Benutzerkonto - das kannst Du im Dienstemanager auch einstellen
(services.msc).
Stell' da halt Dein Benutzerkonto ein (dazu musst Du Benutzernamen und
Passwort angeben, und Dein Konto muss das Recht "Log on as a service"
haben.
https://technet.microsoft.com/de-de/library/cc794944(v=ws.10).aspx
Also, dass habe ich nun umgestellt. Nun erhalte ich die Meldung:
Windows could not start the Service) on Local Computer.
Error 1069: The service did not start due to a log-on failure.
sunshineh schrieb:> Also, dass habe ich nun umgestellt. Nun erhalte ich die Meldung:>> Windows could not start the Service) on Local Computer.>> Error 1069: The service did not start due to a log-on failure.
Hast du denn dein Passwort korrekt eingegeben?
sunshineh schrieb:> Also, dass habe ich nun umgestellt. Nun erhalte ich die Meldung:>> Windows could not start the Service) on Local Computer.>> Error 1069: The service did not start due to a log-on failure.
Hm. Diese Fehlermeldung deutet, nach etwas suchen im Internet, darauf
hin, dass Du einen der genannten Schritte nicht, oder nicht korrekt
ausgeführt hast. (Es gibt allerdings wahrscheinlich noch weitere
Möglichkeiten).
Prüfe bzw. wiederhole folgendes:
> Stell' da halt Dein Benutzerkonto ein (dazu musst Du Benutzernamen> und Passwort angeben, und Dein Konto muss das Recht "Log on as a service"> haben.
Rufus Τ. F. schrieb:> Wenn Du es als Dienst installierst, läuft es in einem anderen> Benutzerkonto
Es gibt hunderte Dienste auf dem PC, und fast alle Entwickler kriegen es
hin, dass der Dienst auf das zugreifen kann was er braucht, ohne dass
der Benutzer eingreifen muss. In diesem speziellen Fall scheint aber
nicht nur der User/TO wenig Ahnung zu haben, sondern auch sein
"Softwareentwickler".
Georg
Ich habe gerade gesehen, dass die Hilfe-Seite ja für einen Windows
Server gedacht ist. Ich habe hier aber nur einen normalen Windows 8.1
PC, auf dem ich den Dienst laufen lassen möchte.
Das sollte doch auch funktionieren, oder?
Ja, die Installation und der Gebrauch von Services unterscheidet sich
nicht zwischen den Server- und nicht-Server-Versionen von Windows.
Die einzigen Windows-Versionen, die keine Services kannten, waren
Windows 95 und seine Aufgüsse (98 & Me), aber jedes ernstgemeinte
Windows seit 1993 kennt Services.
Hi,
gerade habe ich meinen 360 Total Security Scan durchlaufen lassen.
Er meldet mir die entsprechende exe mit EUR/QVM03.0.Maleware.Gen
Muss ich mir hier Gedanken machen, dass der Entwickler mich betrügen
wollte?
Naja, Werkzeugen mit Namen wie "360 Total Security" ist auch nicht zu
trauen, es gibt durchaus "false positives".
Mehrere Virenscanner gleichzeitig kannst Du hiermit
https://www.virustotal.com/de/ ausprobieren.
Wenn es da mehrere Treffer gibt, solltest Du mit dem "Entwickler" mal
ein ernstes Wörtchen reden.
OK, ich habe nun die exe mit virustotal.com durchlaufen lassen und
anscheinend ist sie sauber.
Ich habe die exe nun auf einem anderen PC installiert und dort
funktioniert alles einwandfrei.
Habt ihr noch nen Tipp, was ich hier am Notebook machen kann bzw. was
ich dem entwickler ausrichten kann?
Ich hab keinen Plan was ich noch tun könnte und muss den Service hier
zum Laufen bringen :-(
sunshineh schrieb:> Habt ihr noch nen Tipp, was ich hier am Notebook machen kann bzw. was> ich dem entwickler ausrichten kann?> Ich hab keinen Plan was ich noch tun könnte und muss den Service hier> zum Laufen bringen :-(
das installieren klappt ja scheinbar, sonst würde er nicht in "Services"
stehen.
Lade dir mal
https://technet.microsoft.com/de-de/sysinternals/bb896645.aspx runter.
Setzte einen Filter auf den Name der exe und starten dann den Dienst.
@Peter II
Danke, super Tipp!
Das komische ist, dass der Prozess Monitor anzeigt, das der Service doch
ins Internet kann. Dahinter steht doch SUCCESS.
Kann ich hier nun irgendwie erkennen, warum der Service auf diesem
Notebook keine Daten abruft, auf einem anderen aber schon?
Ich habe nun mit dem Process Monitor die Communication hier auf meinem
Notebook und auch die dem anderen PC beobachtet.
Bei dem anderen PC, bei dem der Dienst problemlos funktioniert, heißt es
immer TCP Send und TCP Receive zu der externen IP-Adresse
Bei mir hier lokal sieht wie im Anhang aus, er versucht einen TCP
Reconnect zu
127.0.0.1:49701 -> 127.0.0.1:57482
Das sieht doch so aus als würde er die Anfrage an sich selbst senden,
weil er nicht raus darf??
Wie komme ich nun an die Software, die diesen Dienst blockt? Kann ich
dies auch irgendwie mit dem ProzessMonitor filtern?
sunshineh schrieb:> Wie komme ich nun an die Software, die diesen Dienst blockt? Kann ich> dies auch irgendwie mit dem ProzessMonitor filtern?
war auf dem PC mal eine Firewall installiert (also nicht die von MS)?
Norton hatte mal ein Problem, wenn man es entfernt hat blieben die
regeln bestehen.
sunshineh schrieb:> Das sieht doch so aus als würde er die Anfrage an sich selbst senden,
Ja.
> weil er nicht raus darf??
Nö. Vermutlich weiß das Ding gar nicht, wohin es etwas senden soll.
Rufus Τ. F. schrieb:> Nö. Vermutlich weiß das Ding gar nicht, wohin es etwas senden soll.
guter Einwand. Eventuell steht ja die Parameter für den Dienst in der
Registry bei Current-User und da kommt der Dienst nicht ran.
OK, es kann schon sein, dass ich früher andere Antivirenprogramme bzw.
Firewalls installiert hatte...
Der Pfad wohin er soll steht eigentlich in einem *.exe.config File. Ich
weiß aber nicht, ob dieser intern in die Registry geschrieben wird, habe
aber gerade den Entwickler deshalb angeschrieben.
//---
Mir ist noch etwas anderes aufgefallen, hat aber nichts direkt mit dem
Problem zu tun.
In der Services.msc habe ich keine Spalte mit der PID und kann diese
auch nicht über View > Add/Remove Columns ergänzen. Kennt ihr das?
sunshineh schrieb:> In der Services.msc habe ich keine Spalte mit der PID und kann diese> auch nicht über View > Add/Remove Columns ergänzen.
Verwechselt du das mit Unix/Linux? In Windows löschst du einen Prozess
mit seinem Namen, nicht einer PID.
Georg
sunshineh schrieb:> In der Services.msc habe ich keine Spalte mit der PID und kann diese> auch nicht über View > Add/Remove Columns ergänzen. Kennt ihr das?
Verwechselst Du das vielleicht mit dem Taskmanager? Da wird bei den
Diensten die PID angezeigt, im Dienste Fenster gibts die Spalte afaik
nicht.
Dauergast schrieb:> Nein. "Früher" konnte man einen Service so schreiben, das er sich quasi> "selbst" installiert - aber spätestens seit Win7 geht das nicht mehr.
Natürlich geht das. Die Exe muß nur die entsprechende Manifest-Resource
beherbergen, die klarstellt, dass sie Admin-Rechte benötigt und der User
muss ggf. den UAE-Popup abnicken.
Und dann geht alles im Prinzip ganz genau so, wie es schon immer ging,
mindestens seit seligen NT3.5-Zeiten.
Genau genommen hat sich am Sicherheitskonzept von WindowsNT nämlich seit
unvordenklichen Zeiten rein garnix Nennenswertes mehr geändert. Der
ganze auffällige, mit Vista eingeführte UAE-Quatsch (und mit Win7 wieder
etwas weniger auffälig gewordene) ist nur übergestülpte
Pseudosicherheit, die am Grundkonzept eigentlich absolut garnix geändert
hat. Ungefähr so sinnvoll und hilfreich wie der per default nicht direkt
"anmeldbare" root-account von Ubuntu oder andere, ähnlich idiotische
"Sicherheits"-Einrichtungen anderer OS.
Alles nur gleichermaßen hilflose Versuche, dem Hauptproblem irgendwie
beizukommen: dem in mindestens 95% aller Fälle vollkommen unfähigen und
unwissenden DAU vor dem Monitor, der einerseits das System möglichst
umfassend benutzen können soll, sich dabei aber andererseits möglichst
nicht gleichzeitig in die Scheisse reiten soll.
Mein Fazit: Jeder dieser Ansätze ist letztlich gleichermaßen grandios
gescheitert. Nutzerkompetenz läßt sich halt offensichtlich durch nix
ersetzen, nur dadurch, eben diese zu schaffen. Und dazu hat wohl
eigentlich keiner dieser idiotischen Ansätze irgendwie hilfreich
beigetragen. Die Ubuntu-User kennen jetzt ihr Passwort sehr schnell
auswendig (weil sie es für jeden Scheiß eintippen müssen) und die
Wixdos-User können einen Button mehr anklicken als früher. Wow, welch
ein grandioser "Gewinn" an Sicherheit...
Ja, das habe ich wirklich mit dem Taskmanager verwechselt! Vielen Dank!
Der Entwickler hat mir nun geschrieben, dass das Programm die URL beim
Start des Programms aus dem Config-File holt.
Das hilft mir nur leider nicht weiter :-(
Hallo,
wo sucht denn das Programm die Konfigdatei?
Du schreibst das Programm aus der Dosbox gestartet zu haben - bist du da
vorher in den Ordner gewechselt? Funktionert es auch wenn du das
Programm aus einem anderen Ordner mit Angabe des Pfads startest?
Was sagt der Prozessmonitor, sollte doch auch zu sehen sein.
Sascha
Also ich gehe in den entsprechenden Ordner und klicke doppelt auf die
exe-Datei, dann geht es.
Das config-File liegt auch in diesem Ordner. Wenn ich den Doppelklick
durchführe, bin ich ganz normal angemeldet, nicht als Administrator. Ich
muss allerdings die Meldung von Windows noch bestätigen, dass ich diesem
Dienst traue.
Wenn ich den Dienst (also die gleiche exe) installiere, starte ich cmd
als Administrator. Das Confi-File liegt aber auch in diesem Fall in dem
Ordner der exe.
Der Entwickler meinte nun:
"Check your network settings - proxy etc. That's definitely your local
configuration issue. If it doesn't help I will try to disable proxy
programmatically just for needed requests"
Was meint ihr dazu?
Das Programm wird nicht auf seine Konfigurationsdatei zugreifen können.
Lass' das Ding als Service laufen, schnapp' Dir den Process Explorer und
lass' Dir die Eigenschaften des Prozesses anzeigen. Dort wird auch das
Arbeitsverzeichnis angezeigt - in dem erwartet das Programm seine
Konfigurationsdatei.
Vernünftige Entwickler bauen in ihre Programme Log-Ausgaben ein, in
denen sie unter anderem vermerken, ob ihre Programme auf
Konfigurationsdateien zugreifen können.
@Rufus:
Das war es leider nicht. Ich sehe im Process Monitor, dass das
Config-File ausgelesen wird :-(
Den Laptop platt machen kann ich aktuell leider noch nicht, da ich noch
ein paar Sachen hier brauche und noch nicht neuinstallieren kann.
Für mich ist die IP-Geschichte unverständlich, wenn er doch das
Config-File mit der Internetadresse ausliest.
sunshineh schrieb:> Ich sehe im Process Monitor, dass das Config-File ausgelesen wird
Tatsächlich? Ich kann das da nicht erkennen.
Im Verzeichnis c:\ep2\output wird nach Dateien gesucht, die
provider_20151102*.csv heißen, aber gelesen wird davon auch keine.
Es wird eine Logdatei beschrieben:
c:\ep2\logs\2015-11-02.log
Hast Du da mal 'reingesehen?
Da ich noch keine Lösung gefunden habe, nutze ich das Programm als
Konsolenprogramm. Allerdings habe ich nun das Problem, dass wenn ich auf
ich auf das File zugreife, das periodische Herunterladen der Werte mit
der Meldung "The process cannot access the file ... because it is beeing
used by another process."
Kann man mit Visual Studio das File so erstellen, dass ich es mit einem
anderen Programm auslesen kann? Muss ich das File zuvor kopieren?
sunshineh schrieb:> Kann man mit Visual Studio das File so erstellen
Du meinst, ein Programm so erstellen? Es gibt verschiedene
Möglichkeiten, z.B. kann man nach der Taktik verfahren File öffnen -
schreiben/lesen - sofort wieder schliessen, und wenn es nicht klappt
nach x sec wieder probieren. Oder man öffnet die Datei in einem
geeigneten sharing mode. In beiden Fällen muss man das aber in beiden
Programmen richtig regeln, sowohl im Service als auch in dem Programm
mit dem du zugreifen willst.
Informiere dich über sharing modes.
Georg