Autor |
Beitrag |
bjoerg
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 08.12.08 11:08
Hallo Forum, ich stehe irgendwie auf dem Schlauch.
Ich habe eine Anwendung geschrieben, die mir Netzlaufwerke zuweisen soll (Programm 1). An einer Stelle des Programmes möchte ich überprüfen, ob die Laufwerke nun auch wirklich zur Verfügung stehen. Dazu habe ich ein zweites Programm, was auch separat einwandfrei läuft. Dies habe ich nun als existierende Datei meinen Programm 1 zugefügt. Wie rufe ich aber nun dieses Programmm auf? Der Ansatz Process xyz = new Process(), fällt an dieser Stelle doch raus, oder?
Für Tipps, oder den richtungsweisenden Schups, wäre ich sehr dankbar.
Gruß Björn
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 08.12.08 11:19
Also wenn du das nur in die Projektmappe hinzugefügt hat, dann ist das nur eine Gruppierung zum einfacheren Entwickeln, mehr nicht. Zur Laufzeit macht das AFAIK keinen Unterschied. new Process() sollte schon passend sein.
Und den Namen und Pfad deiner zweiten Exe, wenn sie im selben Verzeichnis liegt, bekommst du so: C#-Quelltext 1:
| System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, @"Prog.exe") |
|
|
bjoerg 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 08.12.08 13:21
Hallo und danke für Deine Antwort. Ich habe nun einmal versucht mit folgendem Code mein zweites Programm zu öffnen.
Process p = new Process();
p.StartInfo.FileName = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, @"Laufwerke.exe");
p.Start();
Leider kommt hier immer ein Fehler.
Ausnahme System.ComponentModel.Win32Exception wurde im ausgeführten Programm ausgelöst:
Das System kann die angegebene Datei nicht finden.
Dabei liegt die Datei im Dateisystem im selben Verzeichnis wir die Datei, die gestartet wird.
Hast Du vielleicht noch eine Idee, oder habe ich hier etwas übersehen?
|
|
bjoerg 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 08.12.08 13:35
Der Programmcode der zweiten Datei. Wäre vielleicht besser und übersichtlicher, wenn ich dies in meinem Programm 1 einbinden und aufrufen könnte? Aber nur wie. In Programm 1 reinkopieren und dort dann WIE ??? aufrufen?
Vielleicht blöde Frage, aber habe noch nicht viel mit c# erstellt.
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| namespace Laufwerke {
class Program { static void MainA(string[] args) { DriveInfo k = new DriveInfo("k"); DriveInfo l = new DriveInfo("l"); WriteDriveInfo(k); WriteDriveInfo(l); } public static void WriteDriveInfo(DriveInfo drive) { try { MessageBox.Show("Das " + string.Format(drive.VolumeLabel) + "-Laufwerk steht im Explorer zur Verfügung."); } catch (DriveNotFoundException dex) { MessageBox.Show(dex.Message); } } } } |
Moderiert von Kha: C#-Tags hinzugefügt
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 08.12.08 13:39
Das kann ich nicht reproduzieren.
Ich habe soeben eine neue Anwendung mit nur einem Button erstellt: C#-Quelltext 1: 2: 3:
| System.Diagnostics.Process p = new System.Diagnostics.Process(); p.StartInfo.FileName = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"WindowsFormsApplication2.exe"); p.Start(); | und eine zweite nur mit einem Formular in der selben Arbeitsmappe. Dann habe ich beide erstellt und die Exe-Dateien ins selbe Verzeichnis gelegt. Es hat einwandfrei funktioniert.
Lass dir am besten mit MessageBox.Show mal den Pfad ausgeben und schau nach ob dort wirklich die zweite Exe liegt. Hast du vielleicht statt Debug das Release Verzeichnis angenommen oder umgekehrt oder so?
// EDIT:
Ja, warum du das nicht einfach in dein anderes Programm einfügst habe ich mich auch gefragt. Du kannst ja eine neue Methode dafür erstellen.
|
|
bjoerg 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 08.12.08 16:29
// EDIT:
Ja, warum du das nicht einfach in dein anderes Programm einfügst habe ich mich auch gefragt. Du kannst ja eine neue Methode dafür erstellen.
Ich bin jetzt diesen Weg gegangen (...dieser Weg, wird kein leichter sein ...|o|). Den Code-Schnipsel in mein anderes Programm eingefügt - und nun? Ich muss auf die Methode zugreifen. Werte übergeben brauche ich ja nicht, diese sind schon in der Methode enthalten. Aber wie um himmelswillen kann ich die Methode starten, so dass geprüft wird, ob die Laufwerke k und l im Explorer existieren.
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Mo 08.12.08 16:38
bjoerg hat folgendes geschrieben : | // EDIT:
Ja, warum du das nicht einfach in dein anderes Programm einfügst habe ich mich auch gefragt. Du kannst ja eine neue Methode dafür erstellen. |
Willst Du Text, den Du von einem anderen Beitrag übernimmst, nicht besser als "Zitat" kennzeichnen?
Auch Code kann als solcher gekennzeichnet werden, das liest sich erheblich besser.
Für beides kannst Du oben "Bereiche" aufklappen und auswählen.
bjoerg hat folgendes geschrieben : | Aber wie um himmelswillen kann ich die Methode starten, so dass geprüft wird, ob die Laufwerke k und l im Explorer existieren. |
Eigentlich glaube ich nicht, dass diese Frage ernst gemeint ist. In Deinem ersten Code-Auszug rufst Du doch selbst die Methode WriteDriveInfo() zweimal auf.
Das Sinnvollste ist vermutlich, dass Du Dich konzentriert und konsequent in die Programmierung mit C# einarbeitest. Als Einführung schlage ich z.B. das OpenBook Visual C# vor.
Jürgen
|
|
|