Поэтому я пытаюсь создать самореплицирующийся .exe в C ++, используя code::blocks
, Я написал код, и на моей локальной машине он работает без нареканий. После загрузки его на виртуальную машину Windows 7 и 2 других компьютера я понял, что это не работает. Появляется ошибка
«Не удается скопировать файл, доступ запрещен»
Мой компьютер, вероятно, имеет различные права доступа, я полагаю, именно поэтому он работает на моем, а не на других. Вот раздел кода:
ifstream check( "C:\\newfile.exe" );
if( !check.is_open() )
{
char bufferf[MAX_PATH];
GetModuleFileName( NULL, bufferf, MAX_PATH );
std::stringstream str;
str << "copy " << bufferf << " C:\\newfile.exe";
system( str.str().c_str() );
system( "start c:\\newfile.exe" );
cout << __argv[0] << endl;
return 1;
}
else
{
return 0;
}
Помните, я очень новичок в C ++, долгое время занимался разработкой Java, PHP и C #, но я подумал, что пришло время изучать язык более низкого уровня. Если у вас есть предложения по повышению эффективности этой функции, пожалуйста, дайте мне знать. Покажите любой код, который вы можете, так как я еще не на 100% знаком со всеми библиотеками. Короче говоря, я хочу скопировать текущий exe на cdrive, запустить этот скопированный файл и закрыть оригинал. вот еще один способ, которым я пытался
ifstream check( "C:\\newFile.exe" );
if( !check.is_open() )
{
char bufferf[MAX_PATH];
GetModuleFileName( NULL, bufferf, MAX_PATH );
char * original_file = bufferf;
char * new_file = ( char * )"c:\\newFile.exe";
( void ) CopyFile( ( LPCTSTR )original_file, ( LPCTSTR )new_file, FALSE );
system( "start c:\\newFile.exe" );
cout << __argv[0];
return 1;
}
else
{
return 0;
}
Все еще безуспешно. но оба работают безупречно на моей машине разработки (из того, что я вижу), я слышал, что люди говорят, что вы не можете копировать исполняемые exe-файлы в windows, но это неправда, я чувствую, что это проблема с разрешениями, но я могу ошибаться.
Любые советы по самовоспроизведению приветствуются, я открыт для новых методов.
пожалуйста, знайте, что в Windows Vista и Windows 7 включен контроль учетных записей, который не позволяет вам «писать» в определенные папки. Возможно, вам придется запустить программу в режиме администратора или вообще отключить UAC, чтобы ваша программа копировала / создавала файл из одного места в специальную защищенную папку.
Чтобы попросить пользователя разрешить запуск программы в административном режиме, вы должны определить и связать файл манифеста с вашим приложением: это говорит вам, как это сделать.
Других решений пока нет …