gpt4 book ai didi

c++ - Cpp self 复制访问被拒绝

转载 作者:太空宇宙 更新时间:2023-11-04 12:04:00 26 4
gpt4 key购买 nike

所以我正在尝试使用 code::blocks 在 C++ 中创建一个 self 复制的 .exe。我已经编写了代码,并且在我的本地机器上它可以完美运行。在 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 复制到 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 文件,但事实并非如此,我觉得这是一个权限问题,但我可能是错的。

欢迎任何关于 self 复制的提示,我愿意接受新方法。

最佳答案

请注意,Windows Vista 和 Windows 7 启用了 UAC,这不允许您“写入”某些文件夹。您可能必须在管理员模式下运行该程序或完全禁用 UAC,以便您的程序将文件从一个位置复制/创建到 protected 特殊文件夹。

要请求用户允许程序以管理模式运行,您必须定义一个 list 文件并将其链接到您的应用程序:这会告诉您如何操作。

关于c++ - Cpp self 复制访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12962438/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com