だから私は .exe を使用して c++ で自己複製する .exe を作成しようとしていますcode::blocks
。コードを書きましたが、ローカル マシンでは問題なく動作します。Windows 7 仮想マシンと他の 2 台の PC にロードした後、動作しないことに気付きました。エラーが発生します
「ファイルをコピーできません。アクセスが拒否されました」
私のPCにはおそらく異なるアクセス許可が設定されていると思われます。コードのセクションは次のとおりです。
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をcドライブにコピーし、コピーしたファイルを実行して元のファイルを閉じたいと思います。ここに私が試した別の方法があります
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;
}
まだ成功していません。しかし、どちらも私の開発マシンで問題なく動作します (私が見る限り) Windows で実行中の exe ファイルをコピーできないと言う人がいると聞きましたが、それは真実ではありません。権限の問題だと思いますが、間違っている可能性があります。
自己複製に関するヒントは大歓迎です。私は新しい方法を受け入れます。