CPP自副本访问被拒绝

Cpp self copy access denied

本文关键字:拒绝 访问 副本 CPP      更新时间:2023-10-16

因此,我尝试使用code::blocks在C 中创建一个自我复制。我已经编写了代码,在本地机器上它可以完美地发挥作用。将其加载到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文件,但这不是真的,我觉得这是一个许可问题,但我可能错了。

欢迎任何有关自复制的技巧,我对新方法开放。

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

请求用户允许以管理模式运行程序,必须将清单文件定义并链接到您的应用程序:这告诉您如何执行。