正在运行的可执行文件,可以修改

时间:2012-07-24 20:43:54

标签: c++ windows-ce

我有一个用于Windows CE 5的Visual Studio 2008 C ++项目,我希望当前运行的可执行文件能够自行修改。

具体来说,我希望能够读取/写入exe文件本身存储的一些数据。我不需要(或希望)修改可执行代码。

在常规窗口中,我可以使用字符串资源和UpdateResource函数,但在WinCE中不存在。

遗憾的是,

CreateFile因文件已被使用而失败。

有人有任何其他建议吗?

1 个答案:

答案 0 :(得分:1)

首先,你为什么需要这样做?您应该可以使用其他方法执行此操作。

我对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.
}

祝你的项目好运!