Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

C sharp Externes Programm mit Angabe eines Arbeitsverzeichnisses starten.

Frage Entwicklung C und C++

Mitglied: Enriqe

Enriqe (Level 1) - Jetzt verbinden

17.12.2012 um 12:19 Uhr, 4110 Aufrufe, 9 Kommentare, 1 Danke

Hallo Admins,

erstmal vorneweg: Ich bin ein absoluter Programmier- Noob. Das heißt, ich habe vom Programmieren wirklich gar keine Ahnung und versuch nun trotzdem ein bisschen Code zusammenzustückeln, da ich keine andere Lösung für mein Problem sehe.
Ich werde es Euch kurz schildern. Wir setzen auf einem Windows 2003 Server, welcher uns auch als Printserver dient, einen vom Hersteller unseres ERP- Programms gestrickten Druckerspooler ein. Leider läuft dieses Programm nicht sehr zuverlässig und muss hin und wieder neu gestartet werden. In der Regel, passiert dies wenn ich nicht da bin und dann sollte das Programm von einer Arbeitsstation aus gestartet werden können.
Diese Aufgabenstellung erschien mir anfangs einfach mit einem Tool wie z. B. PSExec, lösbar zu sein. Leider muss beim Programmaufruf aber ein Arbeitsverzeichnis angegeben werden, welches auf einem anderen Server liegt.
Ungefähr so: Programm: C:\Programme\ERP\Druckspooler.exe Arbeitsverzeichnis: W:\Programmverzeichnis\ERP\Datenbankverzeichnis (W: ist eine Freigabe auf einem anderen Server)
Genau an der Tatsache, dass ich auf eine Netzfreigabe wechseln muss, scheitert jeder Versuch, das Programm aus einer Batchdatei heraus aufzurufen. Nun wollte ich versuchen, ein kleines Programm zu erschaffen, welches mir den Aufruf mit samt Arbeitsverzeichnis erledigt. Dazu habe ich im Netz folgenden C# Code gefunden:

using System;
using System.Diagnostics;

namespace Druckspooler_starten
{
class Csharp_Beispiel
{
static void Main(string[] args)
{Process CPB = new Process();

CPB.StartInfo.FileName = "C:\\programme\\ERP\\Druckspooler.EXE";
CPB.StartInfo.Arguments = "";

CPB.Start();
}
}
}

Ich habe mir den Code an meine Gegebenheiten angepasst und der Aufruf des Programms funktioniert damit auch. Da aber kein Arbeitsverzeichnis angegeben ist, terminiert das Programm mit der Fehlermeldung: Kann Datenbankserver nicht finden.
Also, nun zur Frage: Ist es möglich ein Arbeitsverzeichnis anzugeben und wenn ja, dann wie?
Oder alternativ: Hat Jemand eine andere Idee das Problem zu lösen.
Eine Bitte habe ich dabei: ich würde mich freuen, wenn Ihr bei Euren Antworten darauf achten könntet, dass sie für einen blutigen Anfänger verständlich sind.

Danke schon einmal im Voraus.

Gruß
Enriqe
Mitglied: colinardo
17.12.2012, aktualisiert um 13:21 Uhr
unter CPB.StartInfo.FileName = "C:\\programme\\ERP\\Druckspooler.EXE";
fügst du noch folgende Zeile für das Arbeitsverzeichnis hinzu:
01.
CPB.StartInfo.WorkingDirectory = "W:\\Programmverzeichnis\\ERP\\Datenbankverzeichnis";
Bitte auf die doppelten Backslashes im Pfad achten !
Das Programm musst du dann aber trotzdem per PSEXEC auf dem Server starten lassen.

Alternativ würde ich ein Programm schreiben, das den Printspooler auf seine Funktion hin auf dem Server überwacht.
Wenn der Prozess einfach nur terminiert wäre es sehr einfach ein Programm zu schreiben das alle paar Minuten überprüft ob der Prozess noch vorhanden ist.
So ist kein Eingriff der Benutzer mehr nötig wenn der Spooler über den Jordan geht.
Wenn du willst bin ich Dir dabei behilflich...

Grüße Uwe
Bitte warten ..
Mitglied: colinardo
17.12.2012, aktualisiert um 14:29 Uhr
Hier noch ein Programm das den PrintSpooler Prozess checkt ob dieser vorhanden íst, und wenn nicht diesen startet:
In der Zeile mit : string procName = "Druckspooler"; musst du den Namen des Spooler-Prozesses anpassen( ohne ".exe" am Ende).

Das Programm dann noch mit dem Windows Scheduler auf dem Server alle paar Minuten aufgerufen, fertig.
01.
using System; 
02.
using System.Diagnostics; 
03.
using System.Threading; 
04.
 
05.
namespace MonitorPrintSpooler 
06.
07.
    class Program 
08.
09.
        static void Main(string[] args) 
10.
11.
            string procName = "Druckspooler"; 
12.
            if (Process.GetProcessesByName(procName).Length < 1) 
13.
14.
                //Starte PrintSpooler 
15.
                Process ps = new Process(); 
16.
                ps.StartInfo.FileName = "C:\\programme\\ERP\\Druckspooler.EXE"; 
17.
                ps.StartInfo.WorkingDirectory = "W:\\Programmverzeichnis\\ERP\\Datenbankverzeichnis"; 
18.
                ps.Start(); 
19.
20.
21.
22.
23.
 
Das ganze geht natürlich nur wenn der Prozess auch wirklich abschmiert, nicht wenn dieser nur hängt.
Bitte warten ..
Mitglied: Enriqe
18.12.2012 um 10:53 Uhr
Hallo Softmeister,

eben lese ich Deine Vorschläge zur Lösung meines Problems. Noch habe ich sie nicht ausprobieren können, möchte mich jedoch gleich bedanken für die schnelle und leicht verständliche Antwort.
Find ich SUPER!!!
Ich werde Dich über das Ergebnis auf dem Laufenden halten und vielleicht tauchen ja auch neue Fragen auf.
Vielen Dank auf jeden Fall

Gruß
Enriqe
Bitte warten ..
Mitglied: Enriqe
18.12.2012 um 13:16 Uhr
Hallo Softmeister,

also, lokal ausgeführt startet das C# Programm mit der Angabe des Arbeitsverzeichnisses im Code. Super.
Was ich allerdings nicht verstehe ist, dass wenn ich das C# Programm remote über PSexec aufrufe, dann bekomme ich zwar in der Konsole ein errorcode 0 zurück und ich sehe am Zielsystem auch im Taskmanager den Task auftauchen aber das Spooler- Programm (frontend) startet nicht. Es müsste ein Symbol im Systray auftauchen über welches ich mir z. B. den Monitor anzeigen lassen kann. Das kommt nur, wenn ich das C# Programm lokal aufrufe. Fehler bekomme ich keine.
Den Code zum überwachen und neustarten des Spoolers, sollte der nicht mehr laufen, habe ich noch nicht angepasst. Das werde ich als nächstes tun.

Vielen Dank noch einmal und vielleicht hast Du ja eine Idee, warum der Aufruf remote anders sein könnte als lokal.
Bitte warten ..
Mitglied: colinardo
18.12.2012 um 13:22 Uhr
Du musst in PSEXEC mit dem Parameter "-i" explizit angeben das das Programm in der Console-Session auf dem Server interaktiv(also mit Benutzeroberfläche) läuft, ansonsten wird das Programm mit den in psexec angegebenen Rechten ohne Benutzeroberfläche im Hintergrund gestartet.
Bitte warten ..
Mitglied: Enriqe
19.12.2012 um 09:07 Uhr
Hey Softmeister,
weiß der Teufel warum, aber wenn ich -i angebe, bekomme ich wieder die Meldung, "Datenbankserver nicht gefunden".
So langsam denke ich doch an´s Aufgeben
Ich wollte es ja nicht glauben, als die Softwarefirma die das Ding gestrickt hat sagte, dass das nicht geht.
Vielleicht stimmt es ja.
Ich danke Dir für Deine Bemühungen und werde jetzt einfach mal Deine zweite Variante ausprobieren.

Gruß
Enriqe
Bitte warten ..
Mitglied: colinardo
19.12.2012 um 10:22 Uhr
Mit eingebundenen Netzlaufwerken ist das so eine Sache. Diese sind immer nur für den jeweiligen Bneutzer verbunden und nicht Systemweit. D.h.unter dem Account mit den Login-Daten mit denen du psexec ausführst müssen muss das Netzlaufwerk eingebunden sein. Eventuell musst du noch den PSEXEC Parameter zum Laden des Profils aktivieren damit das Netzlaufwerk in dessen Kontext verfügbar ist, hab den grad nicht im Kopf. Mach mal psexec -?.
Aber meine zweite Lösung würde ich Dir sowieso empfehlen. So braucht niemand eingreifen und alles geht automatisch.

Grüsse Uwe
Bitte warten ..
Mitglied: Enriqe
19.12.2012 um 12:26 Uhr
Hallo Uwe,

ja, so scheint es zu sein. Die Angabe von -i (auch mit Session ID) führt generell zur Meldung "Datenbankserver nicht gefunden" obwohl der Prozess mit User und Session genau so gestartet wird wie der, den ich lokal starte. (laut Process Explorer) - Verstehe es wer will. Auch das Hantieren mit allen anderen in Frage kommenden Parametern, ändert nichts an der Sache.
Deinen zweiten Vorschlag habe ich angepasst und so läuft es auch. Ich denke, das könnte auch eine Lösung sein. Ich habe es jetzt einmal so geplant, dass es alle 10 Minuten prüft und wenn der Prozess nicht da ist, wird er gestartet. Ich beobachte das jetzt einmal und bedanke mich noch einaml für Deine tolle und immer schnelle Hilfe.

Ich wünsche Euch allen da draußen ein frohes Weihnachtsfest und einen guten Rutsch in 2013
Enriqe
Bitte warten ..
Mitglied: colinardo
19.12.2012 um 12:31 Uhr
Keine Ursache, wünsche ebenfalls frohe Feiertage (ohne Weltuntergang ) -- wenn es dann noch neue Serverhardware regnen würde wäre das neue Jahr gerettet! =(8--)

Uwe
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Batch & Shell
gelöst SAP Externes Programm Parameterübergabe an Skript in Variable (2)

Frage von Erik72 zum Thema Batch & Shell ...

Sicherheitsgrundlagen
Programm ohne UAC und Administratorrechte starten (3)

Anleitung von agowa338 zum Thema Sicherheitsgrundlagen ...

Windows 10
Durch einschalten des xbox one controller ein programm starten (3)

Frage von xsoerenx zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...