我有一个用例,我需要在MyProg.exe启动后打开它,进行一些编辑并再次存储以替换自身。我们曾经称这种自修改代码为严重不良代码。但是,我确实有一个真正的白帽子用例,并且愿意这样做。
此代码在打开时失败:
std::fstream inOutFile;
inOutFile.open( exePathName, std::ios_base::in | std::ios_base::out | std::ios_base::binary );
if( inOutFile.is_open() )
{ …
为了测试它是否可以使用普通命令完成,我创建了MyTest.exe程序,从命令提示符处运行了该程序,并运行了从MyText.exe顶部的另一个文件夹复制的MyText.exe。正在运行。没问题,所以我知道有一些系统文件命令可使它正常工作。我只是希望尽可能地使用可移植的ISO c ++习惯用法。有什么想法吗?
EDIT1: 我发现Windows现在有一套全面的Application Recovery and Restart Functions。我注意到在过去的两年中,微软在断电后重新启动应用程序方面变得更加出色。我怀疑这是由于该API的发展所致。 FX,RegisterApplicationRestart函数完美解决了我的问题。
EDIT2: 我不得不放弃尝试使用Microsoft的“应用程序和恢复”功能来保存命令行状态。它们过于严格,只能用于未处理的异常和非响应性,然后需要交互式用户屏幕。 FX,如果您断电并且只希望您的应用使用内部cmdline状态信息来重新启动,它们将无法工作。看来我必须自己编写程序。