使用SetEnvironmentVariable調整應用程式環境變數中的path設定
在開發軟體時,碰到了有一大批的dll需要載入,且這些dll中有隱式連結到其它dll情況.由於某些原因,不能將dll放入系統目錄中也不能將他們放置在應用程式同一目錄中.
為集中管理,將其放置到應用程式目錄下的字目錄MyDllPath目錄下.
當使用LoadLibrary載入dll時會由於dll中存在隱式連結,且被連結的dll不在當前路徑下(在MyDllPath路徑下)而導致載入失敗的情況.
這時,可以使用GetEnvironmentVariable/SetEnvironmentVariable來調整本應用程式的路徑設定.將MyDllPath載入到本應用程式的當前路徑中.這樣即可正常載入所需要的dll了.
如下是修改當前應用程式目錄路徑的方法:
BOOL CDemoApp::SetCurrentEnvPath()
{
char chBuf[0x8000]={0};
DWORD dwSize =GetEnvironmentVariable("path",chBuf,0x10000);
CString strEnvPaths(chBuf);
// 將當前路徑\dll路徑新增到本程式的路徑中
if(!::GetModuleFileName(NULL,chBuf,MAX_PATH))
return FALSE;
CString strAppPath(chBuf);
const int nPos = strAppPath.ReverseFind(_T('\\'));
if(nPos>0){
// 路徑中包含最後的'\\'
strAppPath = strAppPath.Mid(0,nPos+1);
}
strEnvPaths.TrimRight(";");
strEnvPaths += ";" + strAppPath +"MyDllPath;";
BOOL bRet = SetEnvironmentVariable("path",strEnvPaths);
return bRet;
}
根據MSDN.應用程式在載入dll時,所搜尋的路徑如下(Windows 2000/NT):
- The directory from which the application loaded.
- The current directory.
- The system directory. Use the GetSystemDirectory function to get the path of this directory.
- The 16-bit system directory. There is no function that obtains the path of this directory, but it is searched.
- The Windows directory. Use the GetWindowsDirectory function to get the path of this directory.
- The directories that are listed in the PATH environment variable.
更詳細的資訊可以參考msdn
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586%28v=vs.85%29.aspx
相關文章
- Mac 設定環境變數的位置、檢視和新增PATH環境變數Mac變數
- 系統預設環境變數PATH設定變數
- MAC 設定環境變數path的幾種方法Mac變數
- 環境變數path變數
- rust程式中設定和訪問環境變數Rust變數
- linux 環境變數設定方法總結(PATH/LD_LIBRARY_PATH)Linux變數
- 設定環境變數變數
- Linux中修改環境變數PATH的方法Linux變數
- win7系統怎麼設定環境變數pathWin7變數
- 什麼是環境變數?Python中如何設定環境變數?變數Python
- RMAN環境變數的設定變數
- Rust 使用 dotenv 來設定環境變數Rust變數
- export 設定環境變數Export變數
- oracle環境變數設定Oracle變數
- CentOS環境變數設定CentOS變數
- redhatas 設定環境變數Redhat變數
- rman 設定環境變數變數
- JAVA環境變數設定Java變數
- 設定環境變數(轉)變數
- 什麼是環境變數?python設定環境變數有什麼用?變數Python
- Linux配置環境變數$PATHLinux變數
- Linux - 新增PATH環境變數Linux變數
- 環境變數的設定方法(轉)~變數
- java設定-JDK環境變數的設定(轉)JavaJDK變數
- win10環境變數怎麼設定 win10設定環境變數的方法Win10變數
- Linux設定環境變數Linux變數
- c#環境變數設定C#變數
- XMLBeans 環境變數設定XMLBean變數
- Linux 環境變數設定Linux變數
- java JDK環境變數設定JavaJDK變數
- java jdk 設定環境變數JavaJDK變數
- ansible 設定環境變數變數
- ansible設定環境變數變數
- 在Linux中,什麼是環境變數?如何設定和檢視環境變數?Linux變數
- 在solaris環境下,根據java程式的不同,設定不同的環境變數Java變數
- Golang環境變數設定詳解Golang變數
- JDK1.8環境變數設定JDK變數
- Centos7環境變數設定CentOS變數