如何为不同的操作系统设置可执行文件的目录?
How to set a directory for a executable file for different Operating Systems?
我正在尝试为我的代码设置一个特定的目录,这是一个 MFC 项目。已经编写了一个对话框的代码(在 visual studio c++ 中),现在我将在不同的 OS 中使用此代码的 .exe 文件,并在我想要的目录中替换此文件。为了达到这个目标,我使用了 GetModuleFileName function.Therefore, by following these 建议我将这段代码包含在我的代码的 OnInitDialog() 函数中:
//function that gets the directory without the file name:
TCHAR szFilePath[_MAX_PATH];
TCHAR driveLetter[3];
TCHAR directory[MAX_PATH];
TCHAR FinalPath[MAX_PATH];
::GetModuleFileName(NULL, szFilePath, _MAX_PATH);//Retrieves the current directory for the current process.
// Add all the files and directories in the windows directory.
//VERIFY(0 < ::GetWindowsDirectory(lpszWinPath, MAX_PATH));
// Make the windows directory the current directory.
::GetCurrentDirectory(MAX_PATH, lpszOldPath);
//::SetCurrentDirectory(lpszWinPath);
::SetCurrentDirectory("C:\Program Files");
但是,现在我没有收到任何错误消息,但我不知道为什么我看不到任何输出。例如,我希望在指定目录中创建一个 .exe 文件。
以上代码不会创建任何文件,因此不会创建 EXE 文件。假设它试图创建 .\Foo.EXE
,它将有效地创建 C:\Program Files\Foo.EXE
。由于多种原因,这是不正确的。对于初学者,不要硬编码路径,因为它因系统而异。调用 SHGetKnownFolderPath(FOLDERID_ProgramFiles, ...)
获取该路径。
接下来,在那里创建一个子目录。不要直接把可执行文件放在那里。
最后,或许也是最重要的一点,意识到这是提升安装程序 运行 的任务。在正常使用中,Program Files
是只读的。那么普通程序也不会创建可执行文件。
我正在尝试为我的代码设置一个特定的目录,这是一个 MFC 项目。已经编写了一个对话框的代码(在 visual studio c++ 中),现在我将在不同的 OS 中使用此代码的 .exe 文件,并在我想要的目录中替换此文件。为了达到这个目标,我使用了 GetModuleFileName function.Therefore, by following these 建议我将这段代码包含在我的代码的 OnInitDialog() 函数中:
//function that gets the directory without the file name:
TCHAR szFilePath[_MAX_PATH];
TCHAR driveLetter[3];
TCHAR directory[MAX_PATH];
TCHAR FinalPath[MAX_PATH];
::GetModuleFileName(NULL, szFilePath, _MAX_PATH);//Retrieves the current directory for the current process.
// Add all the files and directories in the windows directory.
//VERIFY(0 < ::GetWindowsDirectory(lpszWinPath, MAX_PATH));
// Make the windows directory the current directory.
::GetCurrentDirectory(MAX_PATH, lpszOldPath);
//::SetCurrentDirectory(lpszWinPath);
::SetCurrentDirectory("C:\Program Files");
但是,现在我没有收到任何错误消息,但我不知道为什么我看不到任何输出。例如,我希望在指定目录中创建一个 .exe 文件。
以上代码不会创建任何文件,因此不会创建 EXE 文件。假设它试图创建 .\Foo.EXE
,它将有效地创建 C:\Program Files\Foo.EXE
。由于多种原因,这是不正确的。对于初学者,不要硬编码路径,因为它因系统而异。调用 SHGetKnownFolderPath(FOLDERID_ProgramFiles, ...)
获取该路径。
接下来,在那里创建一个子目录。不要直接把可执行文件放在那里。
最后,或许也是最重要的一点,意识到这是提升安装程序 运行 的任务。在正常使用中,Program Files
是只读的。那么普通程序也不会创建可执行文件。