C# .NET进程的多个重要路径

C# .NET进程的多个重要路径,c#,process,C#,Process,在我目前正在从事的一个项目中,我正在启动一个外部流程。但是,外部进程是从用户文件夹加载当前用户信息的复杂程序的EXE。程序的桌面快捷方式通过将“Target:”参数设置为X:\exepath\prgm.exe,并将“Start In”参数设置为用户路径X:\exepath\username,解决了这个问题 我目前启动的流程如下: Process p = new Process(); p.StartInfo = new ProcessStartInfo( "X:\exepath\prgm.exe"

在我目前正在从事的一个项目中,我正在启动一个外部流程。但是,外部进程是从用户文件夹加载当前用户信息的复杂程序的EXE。程序的桌面快捷方式通过将“Target:”参数设置为
X:\exepath\prgm.exe
,并将“Start In”参数设置为用户路径
X:\exepath\username
,解决了这个问题

我目前启动的流程如下:

Process p = new Process();
p.StartInfo = new ProcessStartInfo( "X:\exepath\prgm.exe" );
p.StartInfo.WorkingDirectory = "X:\exepath\users\username";
p.Start();
while (!p.HasExited) { }
但是,当进程启动时,它启动的程序最终会在
工作目录
中查找所有资源,而不是从该文件夹中提取用户内容以及EXE所在目录中的所有其他内容。这表明
工作目录
和系统快捷方式“Start In:”参数的行为不同

有没有办法用C#进程来模拟这种行为?或者,是否可以在C#中创建一个快捷方式,然后从进程调用开始

请让我知道,如果更多的信息将是有益的

编辑-


经过更多的尝试和错误,我决定使用并运行它。WSH使用名称WorkingDirectory作为“起始位置:”参数的值。在我上面的代码中,它的行为与进程的执行完全相同。我仍然收到错误。

差异可能是由于使用Shell进程来执行:

WorkingDirectory属性的行为 使用UseShellExecute时会有所不同 比UseShellExecute为 错。当UseShellExecute为true时, WorkingDirectory属性 指定文件的位置 可执行文件。如果WorkingDirectory是一个 空字符串,当前目录为 理解为包含可执行文件

当UseShellExecute为false时 未使用WorkingDirectory属性 查找可执行文件。相反,它是 由已启动的进程使用 只有在 新进程的背景


我怀疑如果您将p.StartInfo.UseShellExecute设置为false,它可能会按照您的意愿运行。

我已经解决了我的问题,这毕竟与创建进程无关。事实上,根本原因是有点尴尬,但可能具有教育意义,因此我将提供一个解释

我在OP中发布的代码是用于说明问题的示例代码。在我的实际项目中,我从注册表项中检索
ExePath
UserPath
。项目是一个选择器工具,用于在多个安装的第三方软件版本之间切换,并读取/编辑这些注册表项以完成其工作

当我编写写入注册表的代码时,我使用了
DirectoryInfo.FullPath
,它返回
“X:\ExePath”
,而不是
“X:\ExePath\”
。这使得程序无法从ExePath文件夹中找到所需的文件,查找的是X:\EXEPATHTSETTINGS.inf而不是“X:\ExePath\settings.inf”。我在代码和现有注册表实体中插入了尾随的反斜杠,一切正常


经验教训:始终非常非常仔细地检查路径值。

或到.True?我认为在.net中它默认为false,而刚才使用的快捷方式ShellExecute?在.net上布尔值确实默认为false,但此属性没有,通过链接:“True在启动进程时使用shell;否则,进程将直接从可执行文件创建。默认值为true。“不幸的是,我尝试了这两个值,但结果都没有改变。外部进程中的一个工具在用户路径中使用INF文件,在EXE路径中使用多个INF,但使用上面的代码,再加上
UseShellExecute
中的任一值,该工具会给出错误:”无法打开X:\exepath\users\username\file.inf”,其中file.inf是它应该在exepath中查找的文件。更好的课程:使用
System.IO.Path.Combine()
@Joel:我确实使用Path。组合了很多,但直到现在才意识到DirectoryInfo的FullPath属性没有添加尾随的反斜杠。现在我知道了,我可以将它们结合使用以获得更大的好处。谢谢提醒!