4

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

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

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

不幸的是, CreateFile失败,因为该文件已在使用中。

有人有其他建议吗?

4

1 回答 1

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

祝你的项目好运!

于 2012-07-28T15:55:57.337 回答