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

本文关键字:启动 设置 位置 方式 进程 编程 | 更新日期: 2023-09-27 18:02:45

我有一个应用程序,可以在我的桌面上创建一个快捷方式,并允许您将文件拖放到快捷方式中以执行操作(将word文档转换为PDF(。现在我正在尝试做的是使用 shellexecute (.NET Process.Start((( 以编程方式执行此操作。

问题是它似乎不起作用,我偷偷怀疑这与创建的快捷方式将"Start in"参数设置为特定文件夹的事实有关。

所以它看起来像这样:

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启动应用程序时复制此功能吗?

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

当你使用Process.Start时,你可以用一个ProcessStartInfo来调用它,而又恰好能够设置一个WorkingDirectory属性 - 这样你就可以复制这种行为。

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