【问题标题】:How to set a directory for a executable file for different Operating Systems?如何为不同操作系统的可执行文件设置目录?
【发布时间】:2015-07-13 08:53:28
【问题描述】:

我正在尝试为我的 MFC 项目代码设置一个特定目录。已经编写了对话框代码(在 Visual Studio C++ 中),现在我将在不同的操作系统中使用此代码的 .exe 文件,并在我想要的目录中替换此文件。为了达到这个目标,我使用了GetModuleFileName 函数。因此,按照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 文件。

【问题讨论】:

  • 你在 Windows 目录里做什么?
  • 是的,从代码中跳过
  • “我不知道为什么看不到任何输出”:那是因为您提供的代码没有生成任何输出。
  • 如果您要问一些关于代码的问题,通常有助于显示该代码而不是一些不相关的东西。您声明了 4 个数组,使用了两个,而您使用的两个数组之一甚至不在声明的 4 个中!?一般来说,您可能可以解决问题,只要您花时间向自己清楚地说明确切的问题是什么。
  • 我在问题中看不到任何特定于 MFC 的内容。你为什么使用 MFC 标签,而不是说,winapi

标签: c++ windows mfc visual-c++-2013


【解决方案1】:

上面的代码不会创建任何文件,因此它不会创建 EXE 文件。假设它试图创建.\Foo.EXE,它将有效地创建C:\Program Files\Foo.EXE。由于多种原因,这是不正确的。对于初学者,不要对路径进行硬编码,因为它因系统而异。致电SHGetKnownFolderPath(FOLDERID_ProgramFiles, ...) 获取该路径。

接下来,在那里创建一个子目录。不要直接把可执行文件放在那里。

最后,或许也是最重要的一点,要意识到这是安装程序运行提升的任务。在正常使用中,Program Files 是只读的。那么普通程序也不会创建可执行文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多