Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   C# Textdatei von Windows öffnen lassen (https://www.delphipraxis.net/46577-textdatei-von-windows-oeffnen-lassen.html)

JayK 27. Mai 2005 15:39


Textdatei von Windows öffnen lassen
 
Hallo,

ich möchte in meinem Programm, wenn man in der AboutBox auf den Button "Lizenz" klickt, eine Textdatei namens "License.txt", die im selben Verzeichnis wie das Programm ist, von Windows öffnen lassen (das was ShellExecute bei Pascal machen würde).

Bis jetzt habe ich folgenden Code:
Code:
void BLicenseClick(object sender, System.EventArgs e)
      {
         try {
            Process.Start("License.txt");
         } catch (Win32Exception) {
            MessageBox.Show("Datei \"License.txt\" konnte nicht gefunden werden.\nBitte überprüfen Sie ihre Installation oder suchen Sie selbst nach der Datei.", "Datei nicht gefunden", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
         }
         
      }
Aber wenn ich auf den Button klicke, schmeißt der JIT-Compiler von .NET eine Fehlermeldung raus.

Was mache ich falsch?

Schon mal Danke im voraus,
JayK

Luckie 27. Mai 2005 15:40

Re: Textdatei von Windows öffnen lassen
 
Zitat:

Zitat von JayK
Aber wenn ich auf den Button klicke, schmeißt der JIT-Compiler von .NET eine Fehlermeldung raus.

Was mache ich falsch?

Du verschweigst uns die Fehlermeldung.

mirage228 27. Mai 2005 15:42

Re: Textdatei von Windows öffnen lassen
 
Hi,

die Fehlermeldung, wie Luckie bereits erwähnte, wäre nicht schlecht zur Lösung des "Rätsels" ;)

Aber allgemein kann ich Dir zu diesem Code-Schinppsel empfehlen - vllt. hilfts Dir ja weiter:
1.) Benutze keine relativen Pfadangaben. Gib den vollständigen Pfad mit an
2.) Prüfe vorher, ob die Datei nicht existiert.

mfG
mirage228

Edit: Man sollte schon seinen eigenen Nickname richtig schreiben können :mrgreen:

MathiasSimmack 27. Mai 2005 16:19

Re: Textdatei von Windows öffnen lassen
 
Bei mir kommt keine Exception. Ist die Datei vorhanden, erscheint sie im Notepad. Ist sie nicht vorhanden, erscheint die selbst geschriebene Fehlermeldung aus dem catch-Teil. :gruebel: Bzgl. des Pfades und der Prüfung per "File.Exists" stimme ich meinen Vorrednern zu. :)
Code:
string licenseFile = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
licenseFile = Path.Combine(licenseFile, "License.txt");

JayK 27. Mai 2005 21:06

Re: Textdatei von Windows öffnen lassen
 
Hallo,


Zitat:

Zitat von Luckie
Du verschweigst uns die Fehlermeldung.

OK:

Zitat:

Zitat von JIT-Compiler
System.ComponentModel.Win32Exception: Das System kann die angegebene Datei nicht finden
at System.Diagnostics.Process.StartWithShellExecuteEx (ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start(String fileName)
at JayTextEdit.AboutBox.BLicenseClick(Object sender, EventArgs e) in c:\Dokumente und Einstellungen\Jakob\Eigene Dateien\SharpDevelop Projects\JayTextEdit\AboutBox.cs:line 173
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage (Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(M essage& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Zitat:

Zitat von Mirage228
Aber allgemein kann ich Dir zu diesem Code-Schinppsel empfehlen - vllt. hilfts Dir ja weiter:
1.) Benutze keine relativen Pfadangaben. Gib den vollständigen Pfad mit an

Dann bräuchte ich eine Funktion, um das Verzeichnis meines Progs zu ermitteln. Bei Delphi isses
Delphi-Quellcode:
ExtractFilePath(paramstr[0])
oder so.
Aber für C# kenn ich des noch nich.

Zitat:

Zitat von Mirage228
2.) Prüfe vorher, ob die Datei nicht existiert.

Die Datei existiert bestimmt und wenn nicht, dann kommt eben das Fehlerfenster, das ich gemacht habe.

Zitat:

Zitat von MathiasSimmack
Code:
string licenseFile = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
licenseFile = Path.Combine(licenseFile, "License.txt");

Jetzt weiß ich wohl, wie daa geht :stupid: werds mal probieren.

EDIT: *räusper* wo befindet sich der/die Strukt/Klasse/wasauchimmer Assembly? Wenn ich den Code einfach nur durchrauschen lasse, findet er kein Assembly.

MathiasSimmack 28. Mai 2005 07:39

Re: Textdatei von Windows öffnen lassen
 
Jay: sorry, die Exceptionmeldung ist ja wohl eindeutig und Deutsch. Daher gibt´s von mir ein freches :mrgreen:.

1. Existiert die Datei?
Code:
File.Exists
2. Die benötigten Assemblies (ein paar kennst du sicher schon)
Code:
using System.Diagnostics;   // Process
using System.ComponentModel; // Win32Exception
using System.IO;            // File.Exists, Path.xxx
using System.Reflection;    // Assembly

JayK 28. Mai 2005 10:58

Re: Textdatei von Windows öffnen lassen
 
Zitat:

Zitat von MathiasSimmack
Jay: sorry, die Exceptionmeldung ist ja wohl eindeutig und Deutsch. Daher gibt´s von mir ein freches :mrgreen:.

Vielen Dank. Ich weiß, dass er meckert, die Datei gäbe es nicht. Aber ich weiß nicht wie es dazu kommt, die Datei ist da!

Zitat:

Zitat von MathiasSimmack
1. Existiert die Datei?
Code:
File.Exists

Na gut, dann bauen wir das auch noch ein :roll: .
Danke für die using-Sachen.

So siehts bis jetzt aus:
Code:
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;

namespace JayTextEdit
{
   /// <summary>
   /// Description of Form1.
   /// </summary>
   public class AboutBox : System.Windows.Forms.Form
   {
      private System.Windows.Forms.Label label12;
      private System.Windows.Forms.Label label1;
      private System.Windows.Forms.Label label11;
      private System.Windows.Forms.Label label9;
      private System.Windows.Forms.Label label8;
      private System.Windows.Forms.Button bOK;
      private System.Windows.Forms.Button bLicense;
      public AboutBox()
      {
         //
         // The InitializeComponent() call is required for Windows Forms designer support.
         //
         InitializeComponent();
         
         //
         // TODO: Add constructor code after the InitializeComponent() call.
         //
      }
      
      [Windows Forms Designer Generated Code]

      void BOKClick(object sender, System.EventArgs e)
      {
         this.Close();
      }
      
      void BLicenseClick(object sender, System.EventArgs e)
      {
         string licenseFile = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
         licenseFile = Path.Combine(licenseFile, "License.txt");
         if (File.Exists(licenseFile))
         {
             try {
                Process.Start(licenseFile);
             } catch (Win32Exception) {
                MessageBox.Show("Datei \"License.txt\" konnte nicht gefunden werden.\nBitte überprüfen Sie ihre Installation oder suchen Sie selbst nach der Datei.", "Datei nicht gefunden", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
             }
         }
         else
         {
            MessageBox.Show("Die angeforderte Datei existiert nicht.", "Datei existiert nicht", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);
         }
         
         
      }
      
   }
}
Es kommt immer "Die Datei existiert nicht".

Moment: Geistesblitz!!!! #develop speichert die Debug-Exes ja in einem Unterordner :wall: Klar das das nicht klappt! Ist ja dumm.

JayK 28. Mai 2005 11:02

Re: Textdatei von Windows öffnen lassen
 
So, ich hab die License.txt in den Debug-Ordner kopiert.
Jetzt klappts! Da hätte ich aber auch eher drauf kommen können. :wall:
Danke leute.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz