[C#] [Forms] Otwarcie pliku domyslnym programem bez ścieżki absolutnej

Witam,

W programie chce poprzez klikniecei na button w pasku otworzyć plik domyslnym prgoramem. Dodałem plik do projektu, do Resources. jednak nie moge go uruchomić bez podania ścieżki absolutnej a niestety nie zawsze będzie ona taka sama ;/

 

Skrót kodu:

using System.Resources;
using System.Diagnostics;

.
.
.

       private void adobePDFToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ProcessStartInfo pdf = new ProcessStartInfo("Resources/Dokument.pdf");
            pdf.UseShellExecute = true;
            Process.Start(pdf);
        }

.
.
.

W takiej konfiguracji mi się nie uruchami, musze podać pełna ścieżkę, np. C/Program/Resources/Dokument.pdf.

 

Co zrobić, żeby pliki doadne do Resources uruchamiały się bez ściezki absolutnej? Dodawac je do rpojektu w inny sposób niz do Resources?

Można tak:

ProcessStartInfo pdf = new ProcessStartInfo("Resources\\Dokument.pdf");

Najlepiej tak:

string path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
ProcessStartInfo pdf = new ProcessStartInfo(path + "\\Resources\\Dokument.pdf");

Ok, dzieki :slight_smile:

 

Tylko, że to będzie mnie wrzucało do folderu Relase/Debug gdzie zostanie skompilowany prgoram, a jak go zmusic zeby przy kompilacji wrzucał tam też tego pdf z resources, a najleoiej by bylo jakby ten pliczek byl jakos zaszyty w exe?

Aby plik pdf był kopiowany do katalogu z plikiem exe, ustaw dla pliku pdf właściwość “Copy to Output” na “Copy always”.

Jeżeli plik pdf umieścisz w zasobach pliku exe, to będziesz musiał go kopiować na dysk przed otwarciem. Najlepiej do katalogu tmp:

string pdfFile = System.IO.Path.GetTempPath() + "\\Dokument.pdf";
System.IO.File.WriteAllBytes(pdfFile, Properties.Resources.PdfFile);
Process.Start(pdfFile);

Plik powinien być na dysku wraz z programem, nie rozumiem co chcesz osiągnąć plikiem w exe.

 

Dodatkowo uważaj na funkcje w Process, jeżeli ktoś ma błędy jakieś w systemie związane ze skojarzeniami, co często się zdarza, może być tak, że wystartowanie programu wywali błąd, także radzę try catch i tym bardziej plik pdf na dysku.

Chodziło mi o to, żeby te pliki nie były dostepne w taki sposób, że wyszukam je ścieżką z poziomu exploratora windows.