C++ CreateProcessA()修改看似无关的常量整数
我正在尝试获取一个可执行文件,将其自身复制到桌面并运行该副本。 为此,我使用CopyFile()和CreateProcessA()。当代码实际工作时,在if语句中调用CreateProcessA()会以某种方式修改作为if条件一部分的常量整数,从而导致执行if和else语句。我真的不明白这怎么会发生。这是密码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"
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;
很可能:
该变量未被修改。程序运行两个副本,每个副本都有自己的变量。我们可以有一个吗?似乎有理由认为还有更多的需要重新规划。另外,
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