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

标签 c++ copy replication

所以我正在尝试使用 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/

相关文章:

javascript - 在nodejs上连接4个不同的redis服务器createClient(不使用集群)

c++ - 在 C++ 中通过 HTTP POST 上传文件

从 git 克隆存储库时 Android Studio 复制和粘贴问题

用于回退场景的 MySQL 复制

java - WebSphere 中跨 JVM 的 session 复制

file - 自定义Gradle “Copy”任务将复制过时的类

c++ - 如何在 mac osx 上使用 msg_nosignal

c++ - 如何在C++中扩展包含环境变量的路径

c++ - C++正则表达式无限循环

java - 数组类型未定义 copyOf 方法