以编程方式在启动进程时设置startin位置

时间:2011-07-19 23:13:35

标签: c# process shortcut shellexecute

我有一个应用程序可以在我的桌面上创建一个快捷方式,并允许您将文件拖放到快捷方式中以执行操作(将word文档转换为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");

从根本上说,我的问题归结为:“Startin”对快捷方式的意义/做法是什么?我可以在使用shellexecute或Process.Start启动应用程序时复制此功能吗?

2 个答案:

答案 0 :(得分:3)

当您使用Process.Start时,可以使用ProcessStartInfo来调用它,而WorkingDirectory又可以设置{{1}}属性 - 这样您就可以复制该行为。

答案 1 :(得分:1)

正如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.");
}