所以我试图在 C++ 中使用 .exe 创建一个自我复制的 .exe code::blocks
。我已经编写了代码,并且在我的本地机器上它可以完美运行。在 Windows 7 虚拟机和其他 2 台 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 复制到 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;
}
仍然没有成功。但两者都在我的开发机器上完美运行(据我所知)我听说人们说你不能在 Windows 中复制正在运行的 exe 文件,但这不是真的,我觉得这是一个权限问题,但我可能错了。
欢迎任何关于自我复制的提示,我对新方法持开放态度。