Программная настройка местоположения при запуске процесса - PullRequest
1 голос
/ 20 июля 2011

У меня есть приложение, которое создает ярлык на рабочем столе и позволяет перетаскивать файлы в ярлык для выполнения действия (преобразовать текстовый документ в PDF). Теперь я пытаюсь выполнить это действие программно, используя shellexecute (.NET Process.Start ()).

Проблема в том, что он, похоже, не работает, и у меня есть подозрение, что это связано с тем, что для созданного ярлыка для параметра «Начать в» задана определенная папка.

Так это выглядит так:

Shortcut target: "C:\Program Files (x86)\MyPDFConvertor\MyPDFConvertor.exe"
Shortcut startin: "C:\Program Files (x86)\MyPDFConvertor\SomeSubfolder\SomeSubSubFolder"

Мой код был следующим.

System.Diagnostics.Process.Start("C:\\Program Files (x86)\\MyPDFConvertor\\MyPDFConvertor.exe", "C:\\MyFiles\\This is a test word document.docx");

По сути, мой вопрос сводится к следующему: что на самом деле означает «запуск» для ярлыков, и могу ли я воспроизвести эту функцию при запуске приложения с использованием shellexecute или Process.Start?

Ответы [ 2 ]

3 голосов
/ 20 июля 2011

Когда вы используете Process.Start, вы можете вызывать его с помощью ProcessStartInfo, который, в свою очередь, может настроить свойство WorkingDirectory - таким образом вы сможете повторить это поведение.

1 голос
/ 20 июля 2011

Как сказал Yahia, установите свойство WorkingDirectory.Вы также должны процитировать аргументы.Вот грубый пример:

//System.Diagnostics.Process.Start("C:\\Program Files (x86)\\MyPDFConvertor\\MyPDFConvertor.exe", "C:\\MyFiles\\This is a test word document.docx");
ProcessStartInfo start = new ProcessStartInfo();
//must exist, and be fully qualified:
start.FileName = Path.GetFullPath("C:\\Program Files (x86)\\MyPDFConvertor\\MyPDFConvertor.exe");
//set working directory:
start.WorkingDirectory = Path.GetFullPath("C:\Program Files (x86)\MyPDFConvertor\SomeSubfolder\SomeSubSubFolder");
//arguments must be quoted:
const char quote = '"';
start.Arguments = quote + "C:\\MyFiles\\This is a test word document.docx" + quote;
//disable the error dialog
start.ErrorDialog = false;
try
{
    Process process = Process.Start(start);
    if(process == null)
    {//started but we don't have access

    }
    else
    {
        process.WaitForExit();
        int exitCode = process.ExitCode;
    }
}
catch
{
    Console.WriteLine("failed to start the program.");
}
...