2015-07-13 8 views
-1

Я пытаюсь установить конкретный каталог для моего кода, который является проектом MFC. Был написан код для диалога (в visual studio C++), и теперь я собираюсь использовать .exe-файл этого кода в другой ОС и заменить этот файл в той директории, которую я хочу. Для того, чтобы прийти к этой цели, я использовал GetModuleFileName function.Therefore, следуя 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 в указанном каталоге.

+2

Что вы делаете в каталоге Windows? – MSalters

+0

Да, Пропущено из кода – Braian

+2

«Я не знаю, почему я не вижу никакого вывода»: это потому, что ваш код, как предусмотрено, не генерирует выход. –

ответ

0

Код не создает никаких файлов, поэтому он не будет создавать EXE-файл. Предполагая, что он попытался создать .\Foo.EXE, он фактически создал бы C:\Program Files\Foo.EXE. Это неверно по ряду причин. Для начала, не переуплотывайте путь, поскольку он отличается от системы к системе. Вызовите SHGetKnownFolderPath(FOLDERID_ProgramFiles, ...), чтобы получить этот путь.

Дальше, создайте подкаталог. Не ставьте исполняемые файлы там напрямую.

Наконец, и, возможно, самое главное, поймите, что это задача установщика, выполняющая повышенную работу. При нормальном использовании Program Files доступен только для чтения. то обычные программы также не создают исполняемые файлы.

Смежные вопросы