Windows Dienst aus C# Projekt installieren.

eXistenC

Mitglied
Nicht zwingenderweise

Ruf die CommandShell mal als Admin auf und für dann installutil aus, um zu schauen, ob es damit geht.

und wie bring ich einem service bei das es den User ermahnen muss erst mal admin zu sein (das kenn ich von anderen ies, da poppt dann was und ich muss nur bestätigen oder bei nichtadminkonnto user & pass des admin eingeben)

NACHTRAG:
OK, Denkfehler, wenn ich die BAT als ADMIN starte und in der BAT die absoluten Pfade setze, dann geht es reibungslos!
Danke für den TIP.

NUn hab ich noch ein Problem. Der Dienst schreibt einfach nicht ins Debug mit Trace.Write... kann er das grundsätzlich nicht oder läuft das in einem anderen Kontext den ich mit SysINternals DebugView ned lesen kann?
 
Zuletzt bearbeitet:

eXistenC

Mitglied
Hi,

Sollte eigentlich funktionieren.
Hast du in DebugView einen Filter gesetzt, der die Ausgaben vielleicht rausfiltert?
Ne, keinen Filter. aber habe nun die gleichen Ausgaben in eine Datei gemacht, das geht. Wollte dann mal eine WindowsAnwendung startet (einfach HalloWelt exe mit simplem Form.). Die sieht man dann auch in den Prozessen, aber das Form nicht.

Keine Ahnung, suche nach nem Tutorial. Aber im internet.google.wald sind mal wieder zu viele Bäume.
 

mutterholzbein

Grünschnabel
Hoi,

man sieht die Form nicht? Wo sieht man denn die Form nicht? in den Prozessen, im Taskmgr, in den Services, (etc.)...
Bitte konkretisieren. Danke. ;)

greetz, me
 

eXistenC

Mitglied
Hoi,

man sieht die Form nicht? Wo sieht man denn die Form nicht? in den Prozessen, im Taskmgr, in den Services, (etc.)...
Bitte konkretisieren. Danke. ;)

greetz, me

Hallo Mutterholzbein,

erst mal genialer Nick... Zeugt von Einfallsreichtum.

Was man sieht:
Den Dienst, den Prozess des Dienstes und die gestartete WindowsApplication die dann eine Form zeigen soll. Aber nur den Prozess, ...

Keine Form auf dem Desktop, also besser gesagt er erzeugt keine GUI.

LG eXi

Nachtrag:
Ich mach mal den Code rein, denke das ist nur mal wieder weil ich zu kompliziert denke. lol
Code:
writeToServiceLog("Testanwendung wird gestartet.");
                myTest = new Process();
                myTest.StartInfo.FileName = @"E:\FIleCollector\TestAnwendung.exe";
                myTest.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
                myTest.StartInfo.CreateNoWindow = false;                

                myTest.Start();
 
Zuletzt bearbeitet:

Nico Graichen

Erfahrenes Mitglied
Hi

Dienste könnte bis XP / W2k3 per Default nicht mit dem Desktop interagieren
(muss dem Dienst explizit gesagt werden). Ab Vista / W2k8 gar nicht mehr und ist auch nicht zu empfehlen!
Wenn du eine WinForms Anwendung benötigst, die mit einem Dienst kommuniziert, dann muss dies über Sockets, .NET Remoting oder WCF geschehen.

Den Zusammenhang zwischen Tracing und WinForms Anwendung versteh ich jetzt aber nicht so wirklich :confused:

----------------
Now playing: Rockland
via FoxyTunes
 

mutterholzbein

Grünschnabel
Hallo Mutterholzbein,

erst mal genialer Nick... Zeugt von Einfallsreichtum.
thx ;)
Was man sieht:
Den Dienst, den Prozess des Dienstes und die gestartete WindowsApplication die dann eine Form zeigen soll. Aber nur den Prozess, ...

Keine Form auf dem Desktop, also besser gesagt er erzeugt keine GUI.
..
LG eXi
...
Code:
writeToServiceLog("Testanwendung wird gestartet.");
                myTest = new Process();
                myTest.StartInfo.FileName = @"E:\FIleCollector\TestAnwendung.exe";
                myTest.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
                myTest.StartInfo.CreateNoWindow = false;                

                myTest.Start();

Ich habe den Code mal schnell in eine App getippt und bei mir lief es am Anfang nicht weil ich den Pfad\zur\Datei\ nicht richtig angegeben hatte, bzw vom system nicht erkannt werden konnte.

Hab dann einfach (ich habe einen Ordner "Development" genau auf dem Desktop) einen string mit dem Pfad (via DirectoyInfo hab ich mir die Speziellen Ordner wie "Desktop" geholt, da es mit %userprofile%\Desktop nicht geht) angelegt und diesen dann übergeben lassen; die ganze Geschichte noch in einen try-catch-block
gepackt um zu sehen wo evntl. ne Exception gefeuert wird, und dananch lief es.

Ich poste mal den Source:
Code:
DirectoryInfo di = new DirectoryInfo(System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop));
            string file = di.ToString() + "\\development\\SendSMS\\SendSMS\\bin\\Debug\\sendsms.exe"; 
            try
            {
                DialogResult dr = MessageBox.Show("Wollen Sie\r\n" + file + "\r\nöffnen?\r\n", "Frage:", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                if (dr == DialogResult.OK)
                {
                    myTest = new Process();
                    myTest.StartInfo.FileName = file;
                    myTest.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
                    myTest.StartInfo.CreateNoWindow = false;
                    Application.DoEvents();
                    myTest.Start();
                }
            }
            catch (Exception ex)
            { MessageBox.Show(ex.Message); }
            Application.Exit();
Mit dieser Quick'n-Dirty Variante lief die Geschichte. Ich würde sagen überprüf noch mal die Pfade
...
myTest.StartInfo.FileName = @"E:\FIleCollector\TestAnwendung.exe";
..
und falls diese doch stimmen sollten, versuch dir doch erstmal so viele Ausgaben über die Aktivitäten deines Priggis zu holen wie, vorserst, möglich (natürlich sollst du diese nicht belassen)! Um zu sehen WIE dein Priggi seine Anweisungen verarbeitet (um Feststellen/Ausschliessen zu können das der Fehler vllt. doch an anderer Stelle liegt).

greetz, me


post skriptum:

Sag mal wird eigentlich nach dem Versuch des Startens deiner "TestAnwendung.exe" die zugehörige TestAnwendung.vshost.exe (ohne das Projekt im VS gerade offen zu haben) ausgeführt?
 

Neue Beiträge