在 C# 中启动具有不同 DLL 路径的进程

Posted

技术标签:

【中文标题】在 C# 中启动具有不同 DLL 路径的进程【英文标题】:Start a process with different DLL path in C# 【发布时间】:2014-09-24 12:53:08 【问题描述】:

我正在使用 Process.Start("MyProcess.exe") 函数启动一个进程。

“MyProcess.exe”使用 DLL。 Exe 和 DLL 在同一个文件夹中。

我已修改此 DLL 并将其定位到具有相同名称的不同路径中。

在某些情况下,我想用修改后的 DLL 启动 MyProcess.exe,我不想删除原始 DLL。

我的 Exe 应该与位于不同文件夹的秒 DLL 一起使用,而不应该与位于同一文件夹的 DLL 一起使用。

我尝试了以下代码,但对我不起作用

processStartInfo.EnvironmentVariables["PATH"] = "PATH_B;" + processStartInfo.EnvironmentVariables["PATH"];

processStartInfo.WorkingDirectory = Path.GetDirectoryName("PATH_B");
processStartInfo.UseShellExecute = false;

myProcess = Process.Start(processStartInfo);

【问题讨论】:

DLL 是 .NET dll 还是原生的? 您可以通过应用配置文件将编译时绑定重定向到其他程序集。看看Redirecting Assembly Versions 【参考方案1】:

由于内置rules within the operating system,系统总是按照以下顺序搜索目录:

加载应用程序的目录。 系统目录。 16 位系统目录。 Windows 目录。 当前目录。 PATH 环境变量中列出的目录。

【讨论】:

【参考方案2】:

如果 DLL 的版本与您使用的不同

Specifying an Assembly's Location

如果是.Net,则在MyProcess.exe的配置文件中

【讨论】:

以上是关于在 C# 中启动具有不同 DLL 路径的进程的主要内容,如果未能解决你的问题,请参考以下文章

具有适用于 memory.dll c# 的进程的组合框

C# 使用登录的用户凭据启动进程

c#:具有多个应用程序域的单个进程 VS 多个进程

C++ DLL 注入:带有特殊字符的路径

如何从 Windows 服务启动具有 UI 的进程?

可以在Windows上为loadLibrary()修改java进程中的“路径”吗?