我知道本文中Window等效的“whereis”命令: https://superuser.com/questions/21067/windows-equivalent-of-whereis
但是如何使用代码执行相同的操作?有没有Windows API?
答案 0 :(得分:2)
使用Linq的C#中的示例代码显示了如何扫描PATH环境变量:
static string SearchEnvPathForProgram(string filename)
{
return Environment.GetEnvironmentVariable("PATH").Split(';')
.Select(dir => Path.Combine(dir, filename))
.FirstOrDefault(path => File.Exists(path));
}
但是,如果这对您来说还不够,并且您需要模仿Windows内核的CreateProcess
函数的完整行为,则必须通过添加注释中列出的其他位置来扩展此函数。 @HarryJohnston(感谢你的评论)。
例如,folder of your current executable,current directory或windows system directory。我猜你会在每个人身上找到一个相应的问题。
答案 1 :(得分:0)
LoadLibraryEx
后跟GetModuleFileName
是一个选项,但只有在您搜索的文件名包含.exe
扩展名时才会生效。
如果启用了安全的DLL搜索模式(默认情况下在现代版本的Windows上),则需要先调用SetDllDirectory
,并将当前目录作为参数传递。不要忘记之后再调用SetDllDirectory(NULL)
来恢复默认行为。
这在多线程程序中可能不安全,因为另一个线程可能会在禁用安全搜索模式时加载DLL。