C++ CreateProcessA()修改看似无关的常量整数

C++ CreateProcessA()修改看似无关的常量整数,c++,winapi,C++,Winapi,我正在尝试获取一个可执行文件,将其自身复制到桌面并运行该副本。 为此,我使用CopyFile()和CreateProcessA()。当代码实际工作时,在if语句中调用CreateProcessA()会以某种方式修改作为if条件一部分的常量整数,从而导致执行if和else语句。我真的不明白这怎么会发生。这是密码 const int wtf {create_duplicate()}; if (wtf != 0) { std::cout << "Duplicate created"

我正在尝试获取一个可执行文件,将其自身复制到桌面并运行该副本。 为此,我使用CopyFile()和CreateProcessA()。当代码实际工作时,在if语句中调用CreateProcessA()会以某种方式修改作为if条件一部分的常量整数,从而导致执行if和else语句。我真的不明白这怎么会发生。这是密码

const int wtf {create_duplicate()};
if (wtf != 0) {
    std::cout << "Duplicate created" << std::endl;
    std::cout << wtf << " != 0 " << std::endl;
    STARTUPINFO info {sizeof(info)};
    PROCESS_INFORMATION processInfo;

    if (CreateProcessA(R"(C:\Users\maxlu\Desktop\test.exe)", "",
           nullptr, nullptr, true, 0,
           nullptr, nullptr, &info, &processInfo)) {
        WaitForSingleObject(processInfo.hProcess, INFINITE);
        CloseHandle(processInfo.hProcess);
        CloseHandle(processInfo.hThread);
    }
} else {
    std::cout << wtf << " == 0 " << std::endl;
    std::cout << "Duplicate not created" << std::endl;
很可能:

  • 由于create_Duplicate()成功,程序将打印“Duplicate created”“1!=0”

  • 程序运行自身的另一个副本

  • 在第二个副本中,create_duplicate()返回0

  • 第二个副本打印“0==0”未创建副本


  • 该变量未被修改。程序运行两个副本,每个副本都有自己的变量。

    我们可以有一个吗?似乎有理由认为还有更多的需要重新规划。另外,
    CreateProcessA
    的第二个参数应该是可修改的。您可能会因为实现细节而幸运(在内部,您的ANSI字符串被转换为UTF-16字符串),然后调用
    CreateProcessW
    。但是,我仍在尝试获取一个可执行文件,将其自身复制到桌面并运行该副本。而且,您确定输出的第二部分不是来自运行副本吗?;-)我怀疑
    wtf
    处于量子状态,同时计算
    true
    false
    ——或者
    replicate created
    来自程序的第一个实例,而
    replicate not created
    来自第二个实例。在
    int main()的开头放一个cout
    验证您的第二个输出是否来自流程的第二个实例。我没有投反对票,但是我认为如果代码上下文得到改进,这个问题可能会得到正面评价。我相信这一切都意味着它工作正常。否则,您会遇到这样的情况:每个进程启动一个附加进程,该进程启动一个附加进程。您是对的,第二个输出来自副本。我实际上想要实现的是独立于第一个进程执行的第二个副本,因此我不希望输出显示在同一个标准输出中。它是第一个进程的子进程。我通过指定进程创建标志CREATE_NEW_process_GROUP和将进程分离到CreateProcessA()来实现我想要的作用
    Duplicate created
    1 != 0
    0 == 0
    Duplicate not created