如何为不同的操作系统设置可执行文件的目录?

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 是只读的。那么普通程序也不会创建可执行文件。