Указание относительного пути - PullRequest
5 голосов
/ 22 февраля 2011

У меня есть проект Windows Forms. В текущем каталоге у меня есть папка справки с файлами * .chm. Какой самый простой способ запустить их из приложения? Как я могу указать относительный путь к ним?

Ответы [ 4 ]

6 голосов
/ 22 февраля 2011

В свойстве Environment.CurrentDirectory будет указано расположение вашего файла .exe.Поэтому, если вы поместите туда свою папку справки, это будет:

// The path to the Help folder.
string directory = Path.Combine(Environment.CurrentDirectory, "Help"); 

// The path to the Help file.
string filePath = Path.Combine(directory , "myHelpFile.chm"); 

// Launch the Help file.
Process.Start(filePath); 

РЕДАКТИРОВАТЬ: я должен сказать, что Environment.CurrentDirectory указывает на папку, где процесс по умолчанию запущен в приложении Windows Forms, ноего значение может быть изменено некоторыми элементами управления (например, OpenFileDialog - см. здесь , чтобы найти обходной путь ) в течение срока службы вашего приложения.В службе Windows Environment.CurrentDirectory сопоставляется с %SystemDirectory%.

5 голосов
/ 22 февраля 2011

Вы должны использовать Help.ShowHelp, чтобы сделать это

var chmFile = "CHM/test.chm";
Help.ShowHelp(ctrl, chmFile);

по умолчанию ShowHelp будет искать файл в пути приложения

3 голосов
/ 22 февраля 2011

Я могу придумать два варианта, в зависимости от того, что вы на самом деле хотите. Первый - получить путь к каталогу resident (где находятся исполняемые файлы), а второй - к каталогу current (каталог, указанный для работы исполняемого файла):

Резидентный каталог :

var path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);

Текущий каталог :

var path = System.Environment.CurrentDirectory;

Существует также другая опция, которая, согласно документации gets the path for the executable file that started the application, not including the executable name:

var path = Application.StartupPath;

Что касается построения вашего пути, другие ответы действительно очень хорошо охватывают это.

3 голосов
/ 22 февраля 2011

Самым простым является

Process.Start("myHelpFile.chm");

Это откроет файл chm в системной программе по умолчанию, связанной с этим типом файла.

Это будет работать до тех пор, пока файл chmнаходится в том же каталоге, что и ваш exe.Если у вас есть подпапка с именем help, путь будет @"Help\myHelpFile.chm".

...