【发布时间】:2015-08-01 19:49:12
【问题描述】:
Persay,如果我想在我的程序运行时更改 .exe(就像它的原始名称是:someexe.exe 并且在您关闭后它会更改为随机或类似的东西)
我以前见过这种情况,我对实现它非常感兴趣,只是为了好玩!
谢谢:)
【问题讨论】:
标签: c++ windows visual-studio winapi c++11
Persay,如果我想在我的程序运行时更改 .exe(就像它的原始名称是:someexe.exe 并且在您关闭后它会更改为随机或类似的东西)
我以前见过这种情况,我对实现它非常感兴趣,只是为了好玩!
谢谢:)
【问题讨论】:
标签: c++ windows visual-studio winapi c++11
我不是 100% 确定,但是常规的 rename 函数应该可以工作。但是,我不确定是否可以重命名当前由操作系统保持打开的文件(而且我现在没有可以测试的 Windows 系统)。
如果您不能在“您自己的可执行文件”上执行此操作,那么您必须通过运行另一个程序 [或批处理文件] 重命名文件,然后恢复您自己的程序 [例如让重命名程序再次启动您的程序,它会以某种方式识别它现在是新名称并且可以继续。
【讨论】:
可能的代码
#include <iostream>
#include <windows.h>
int main(int argc, char** argv)
{
system("title a.exe");
std::cout<<"a.exe is the current name of your .exe file\n";
//do your stuff
std::cout<<"a.exe is changing to b.exe\n";
system("RENAME C:\\path\\a.exe b.exe");
system("title b.exe");
//do your stuff
std::cout<<"now b.exe is changing to a.exe\n";
system("title a.exe");
system("RENAME C:\\path\\b.exe a.exe");
//do you stuff
return 0;
}
但是使用systemcommand 被认为是bad 的做法,因此你应该使用rename 命令,,代码:
#include <stdio.h>
int main(int argc , char** argv)
{
rename("a.exe","bii.exe");
//do your stuff
rename("bii.exe","a.exe");
//do your stuff
return 0;
}
【讨论】:
您必须制作可执行文件的副本。然后您可以重命名该文件,当您关闭当前程序文件时,您需要将控制权转移到另一个程序,最好是删除原始可执行文件的批处理文件。 在 windows system() 中应该能够做这些事情。 您还需要使用代码编写自己的批处理文件来删除调用它的程序。
【讨论】:
system() 可能是 Windows 上最糟糕的主意。一个可靠的解决方案是实现一个启动器,它在目标应用程序上调用WaitForSingleObject,并在目标应用程序终止后执行MoveFile 操作。