C ++ CopyFile () не работает на c: \ - PullRequest
0 голосов
/ 05 сентября 2011

привет, ребята, у меня есть одна простая программа, которая копирует себя. Его работа прекрасно, когда я копирую на D диск. Но когда я пытаюсь скопировать его на диск c, ничего не происходит.

Это код:

int main()
{
        string appDir = "";
        appDir = std::string( result, GetModuleFileName( NULL, result, MAX_PATH ) );
    CopyFile(appDir.c_str(), "C:\\SelfCopyingApp.exe", 1);

    system("PAUSE");
    return 0;
}

У кого-нибудь есть идея? Спасибо ...

1 Ответ

5 голосов
/ 05 сентября 2011

По умолчанию системный диск имеет заблокированные разрешения, которые запрещают копировать туда вещи, которые не являются администраторами.Как правило, не следует связываться с корнем диска.Если вам нужно сделать что-то вроде установщика, то вам следует

  1. Запросить права администратора
  2. Установить себя в правильном месте, а именно %PROGRAMFILES%\CompanyName\ProductName

Возникновение корня диска порождает проблемы;это не то, куда идут программы.

Другие примечания к этому коду, не относящиеся к вашему вопросу:

  1. system("pause") не так.Используйте std::cin.get(), если вам действительно нужен переносимый способ получить такое поведение.
  2. Возможно, вам следует использовать Unicode.
  3. Если GetModuleFileName не удастся, вы будете копировать случайный мусорв это место, а не себя.Вам необходимо проверить коды возврата и GetLastError коды каждой функции Win32.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...