Top-Themen

Aktuelle Themen (A bis Z)

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, 4384 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 ..
Ähnliche Inhalte
C und C++
C-Sharp - Externes Programm in Panel anzeigen und Image davon erstellen
Frage von mabue88C und C++4 Kommentare

Hallo, für die Darstellung von Kamerabildern einer Videoüberwachungsanlage wird ein Programm, das vom Hersteller der Anlage zur Verfügung gestellt ...

C und C++
C-Sharp - Externes Programm (exe) in die Benutzeroberfläche einer eigenen Anwendung einbinden?
gelöst Frage von mabue88C und C++2 Kommentare

Hallo, folgende Gegebenheiten: - Ein Programm eines Dienstleisters läuft auf einem Server - Bei dem Programm handelt es sich ...

Windows Server
VBSkript mit Hilfe eines Dienstes starten (geschrieben in C-Sharp)
gelöst Frage von MesaouWindows Server6 Kommentare

Hi, Folgende Situation Ich habe ein VBSkript, das über einen Dienst gestartet werden soll. Soblad der Dienst gestoppt wird, ...

IDE & Editoren
IDE für C-Sharp und C++ auf Windows
gelöst Frage von BugdroidIDE & Editoren8 Kommentare

Hallo, Ich nutze derzeit Visual Studio, aber auf Dauer ist es mir etwas zu Ressourcenfressend und für meine Zwecke ...

Neue Wissensbeiträge
Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 57 MinutenInternet2 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 4 StundenDSL, VDSL1 Kommentar

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Windows 10

Microsoft bestätigt DMA-Policy-Problem in Win10 v1709

Information von DerWoWusste vor 4 StundenWindows 10

Wer sein Gerät mit der DMA-Policy absichert, bekommt evtl. Hardwareprobleme in v1709 von Win10. Warum? Weil v1709 endlich "richtig" ...

Verschlüsselung & Zertifikate

Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows

Information von ticuta1 vor 8 StundenVerschlüsselung & Zertifikate

Interessant Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows SSH-Kommando in CMD.exe und PowerShell

Heiß diskutierte Inhalte
Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server19 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Hardware
Kein Bild mit nur einer bestimmten Grafikkarten - Mainboard Konfiguration
gelöst Frage von bestelittHardware18 Kommentare

Hallo zusammen, ich hatte schon einmal eine ähnliche Frage gestellt. Damals hatte ich genau das gleiche Problem. Allerdings lies ...

Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement18 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...