임시로 디렉토리를 DLL 검색 경로에 추가하십시오. Windows 7에서이 작업을 수행하는 올바른 방법이 있습니까?Windows 7의 DLL 검색 경로에 임시로 디렉토리 추가
나는 C# 응용 프로그램을 가지고
시나리오,의는 WonderApp를 호출 할 수 있습니다.
WonderApp는 C:\MyPath
에있는 C++ DLL을 호출해야합니다. 또한 DLL에 대한 디렉토리 검색에 추가해야 PATH
에 디렉토리를 추가, this article에 따르면
Environment.SetEnvironmentVariable("PATH",
"C:\\MyPath;" + Environment.GetEnvironmentVariable("PATH"));
: 그래서 WonderApp의 Program.Main()
의 일환으로, 나는 다음과 같은 명령을 추가했다.
솔루션은 Windows XP에서 제대로 작동합니다. PATH
에 디렉토리를 추가하면 DLL이로드되고 프로그램이 제대로 작동합니다. 디렉토리를 추가하지 않으면 DLL이로드되지 않고 "찾을 수 없음"오류가 발생합니다. 그래서 내가 생각
그러나,이의는 SetDllDirectory()
를 사용 해보자,
윈도우 7 작동하지 않습니다. 이처럼 :
[System.Runtime.InteropServices.DllImport("kernel32.dll", SetLastError = true)]
private static extern bool SetDllDirectory(string lpPathName);
그리고 나중에 :
bool success = SetDllDirectory(Util.Paths.GetApplicationDataDir());
success
의 값은 true
이지만, DLL은 여전히로드 할 수 없습니다.
마지막으로 PATH
에 C:\MyPath
을 수동으로 포함하도록 설정하면 응용 프로그램을 실행하기 전에 모두 작동합니다. DLL이로드되고 정상적으로 실행됩니다.
그래서, 다시 반복 :
일시적으로 윈도우 7 아래에있는 DLL 검색 경로에 디렉토리를 추가 에 대한 올바른 방법이 있나요?
업데이트 : Process Explorer를 사용하여 응용 프로그램의 런타임 환경을 확인한 결과 "C : \ MyPath"가 PATH
에있었습니다! 더구나, Helper.dll
이 열린 핸들 목록에있는 것을 보았습니다. (파일이 아니라 DLL로) - 여전히 찾지 못했다고합니다.
64 비트 버전입니까? 실제 경로 이름은 무엇입니까? –
이것은 32 비트 Windows 7 Home입니다. DLL에 대한 전체 경로는 C : \ MyPath \ Helper.dll – scraimer
다른 DLL이 누락되었습니다. "depends.exe"프로그램에서 helper.dll을로드하고 다른 DLL의 종속성을 확인하십시오. – OlimilOops