我有一个适用于 Windows CE 5 的 Visual Studio 2008 C++ 项目,我希望当前运行的可执行文件能够自行修改。
具体来说,我希望能够读取/写入存储在 exe 文件本身中的一些数据。我不需要(或希望)修改可执行代码。
在常规窗口中,我可以使用字符串资源和UpdateResource函数,但这在 WinCE 中不存在。
不幸的是, CreateFile失败,因为该文件已在使用中。
有人有其他建议吗?
我有一个适用于 Windows CE 5 的 Visual Studio 2008 C++ 项目,我希望当前运行的可执行文件能够自行修改。
具体来说,我希望能够读取/写入存储在 exe 文件本身中的一些数据。我不需要(或希望)修改可执行代码。
在常规窗口中,我可以使用字符串资源和UpdateResource函数,但这在 WinCE 中不存在。
不幸的是, CreateFile失败,因为该文件已在使用中。
有人有其他建议吗?
首先,为什么需要这样做?您应该可以使用其他方法来执行此操作。
我对 Windows-CE 不是特别熟悉,但如果需要,您可以复制文件,编辑副本,删除第一个,然后运行另一个。这是一种低效的方法,但如果您只需要在程序范围内执行一次或两次并且速度不是问题,我想您可以这样做:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(int argc, char * argv[]) {
// Check if this IS the copy:
if (argv[0].find(argv[1]) != string::npos) {
system("taskkill -IM myOLDfile.exe"); // Stop the old one running,
system("del myOLDfile.exe"); // Then delete it.
}
ifstream myself(argv[0]); // argv[0] is the program itself
string fullcode;
string line;
if (file.is_open()) {
while (file.good()) {
getline(myself, line);
line.append("\n");
fullcode.append(line);
}
}
myself.close();
// Do whatever you need to do to the code here.
ofstream newcode("myNEWfile.exe");
newcode.write(fullcode);
newcode.close();
system("myNEWfile.exe myNEWfile.exe"); // Starts new file. Also, not a typo.
}
祝你的项目好运!