Autor Beitrag
rexho-m
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Fr 26.02.10 11:45 
Hallo,
ich hab ein wenig gesucht ob dieses Problem angesprochen wurde, doch ich habe leider nix gefunden.

Ich bin ganz neu in C# und schreibe gerade damit ein kleines Tool welches PDF-Dateien über ein Webbrowser öffnet.
Die PDFs sind lokal gespeichert.
Funktioniert eigentlich ganz gut bis auf die folgenden Probleme:
Ich möchte später ein Install-Datei erzeugen und die PDFs werde ich hier mit hinzufügen.
Der Benutzer kann also auswählen wo er das Tool installiert. (Laufwerk C:\ oder D:\ ...)

Wie muss ich das machen damit er die PDFs über ein relativen Pfad öffnet?

Hier mein Code: "webform.Designer.cs"
ausblenden C#-Quelltext
1:
this.webBrowser1.Url = new System.Uri(Application.StartupPath + @"..\PDF\Datei.pdf", System.UriKind.Absolute);					


damit funktioniert es ganz gut, aber wenn ich mein Programm schließe, erscheint eine Fehlermeldung:
Die Anweisung "0x0d02609c" verweist auf Speicher "=x00...". Der Vorgang "read" konnte nicht auf den Speicher ...!

Danke!
PS: ich bin ganz neu in C#, bitte Rücksicht nehmen :)

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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
BeitragVerfasst: Fr 26.02.10 14:48 
Hallo und :welcome:

Lies dir einmal die ganzen Hinweise in der SDK-Doku/MSDN/Hilfe zur WebBrowser-Klasse durch. Da werden eine ganze Reihe kritischer Punkte angesprochen. Insbesondere wird auf die Notwendigkeit von Dispose hingewiesen.

Vorschlag: Sobald der WebBrowser nicht mehr gebraucht wird, wird er mit Close geschlossen und mit Dispose aufgelöst. Dies könntest du auch in MainForm.FormClosing erledigen. Ob das Problem dadurch gelöst ist, kann ich nicht beurteilen; es ist aber denkbar, weil dann die Reihenfolge des "Auflösens" besser passen könnte.

Nebenbei: Der WebBrowser benutzt den IE. Für PDF-Dateien ist der nicht nötig; stattdessen kann mit Process.Start("Datei.pdf") direkt die Standardanzeige für PDFs aktiviert werden (i.d.R. Acrobat Reader). Für die Zusammensetzung von Dateinamen ist Path.Combine zu empfehlen.

Gruß Jürgen