C# Dienst soll eine Datei ausführen

Polli

Mitglied
Hallo ihr lieben,

ich bin mir nicht ganz sicher wo ich das Thema reinstellen soll, deswegen poste ich es hier.

Ich habe ein Problem, nach gefühlt endlosem Suchen im Internet und nicht ganz das passende gefunden, probiere ich es auf diesem Wege.

Ich habe einen Windows Service Dienst erstellt, dieser Dienst soll eine .exe ausführen. Leider bekomme ich es nicht so hin wie ich es mir wünsche, wenn ich das Programm außerhalb des Dienstes ausführe, also als Konsolen-Anwendung ist es kein Problem die .exe auszuführen. Mit Hilfe von Process klappt auch alles wunderbar, sobald ich den Quellcode aber in mein Dienst-Programm übertrage passiert nichts.

Ich zeige es hier mal ein Beispiel an Hand des öffnenes einer .ini-Datei, vom Prinzip ja das selbe.

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Beispiel
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Diagnostics.Process n = new System.Diagnostics.Process();
            n.StartInfo.FileName = @"C:\test.ini";
            n.Start();
        }
    }
}


Sobald ich das aber in einen Dienst einfüge, öffnet sich die .ini-Datei nicht mehr.

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;

namespace TestDienst
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            System.Diagnostics.Process n = new System.Diagnostics.Process();
            n.StartInfo.FileName = @"C:\test.ini";
            n.Start();
        }

        protected override void OnStop()
        {
        }
    }
}

Der Dienst kann installiert werden und klappt auch alles, nur die Datei wird nicht geöffnet.

Wisst ihr Rat? Könnt ihr mir weiterhelfen?

Liebe Grüße
Polli.
 

Shakie

Erfahrenes Mitglied

Polli

Mitglied
Okay ich hab das verstanden, den Link so gut es geht verfolgt, einige Lösungsansätze probiert umzusetzen, im Endeffekt hab ich es soweit hin bekommen, dass er die Datei öffnet. Was natürlich total toll ist, aber dass wofür das Programm in Endeffekt da ist klappt nicht.
Also muss ich wohl doch genau auf das Thema eingehen.
Der Dienst soll einen Rechenkern starten und testen ob er läuft, dass immer wieder machen. Leider klappt es nicht den Rechenkern zu starten.
Das wird mit Hilfe von Argumenten realisiert, z.B.

Code:
EventLog.WriteEntry(aktuellerPfad);
ProcessStartInfo psi_java = new ProcessStartInfo(java_path);
psi_java.WindowStyle = ProcessWindowStyle.Hidden;
psi_java.Arguments = @" -jar -Xmx256M -Xrs " + aktuellerPfad + "rk.jar";
EventLog.WriteEntry(psi_java.Arguments);
EventLog.WriteEntry(java_path);
try
{
   Process procJava = Process.Start(psi_java);
   procJava.MainModule.ToString();
}

Wie ich es geschafft habe, dass die Datei (ini) geöffnet wird, in dem ich unter "Dienst-->Eigenschaften-->Anmelden-->Lokales Systemkonto-->Datenaustausch zwischen Dienst und Desktop zulassen"

Ich denke dass ist nicht die optimale Lösung, weil ich eigentlich was im Quellcode ändern müsste nur ich weiß nicht genau wo und wie...

Habt ihr Rat?
Danke schon mal im Vorraus...
 

Polli

Mitglied
Kann mir niemand weiterhelfen****?
Ich sitze immer noch an dem Problem und bin zu keiner richtigen Lösung gekommen.

Liebe Grüße
Polli.