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

修改自身的正在运行的可执行文件 我有一个Visual Studio 2008 C++项目,用于Windows CE 5,在这里我希望当前运行的可执行文件修改自己。,c++,windows-ce,C++,Windows Ce,具体来说,我希望能够读取/写入exe文件本身中存储的一些数据。我不需要(或希望)修改可执行代码 在普通的windows中,我可以使用字符串资源和函数,但WinCE中没有 很遗憾,失败,因为该文件已在使用中 有人有其他建议吗?首先,你为什么要这样做?您应该能够使用其他方法来实现这一点 我对Windows CE不是特别熟悉,但如果需要,您可以复制文件、编辑副本、删除第一个副本,然后运行另一个。这是一种低效的方法,但是如果你在整个程序中只需要做一到两次,而且速度不是问题,我想你可以做: #includ

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

在普通的windows中,我可以使用字符串资源和函数,但WinCE中没有

很遗憾,失败,因为该文件已在使用中


有人有其他建议吗?

首先,你为什么要这样做?您应该能够使用其他方法来实现这一点

我对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.
}
#包括
#包括
#包括
使用名称空间std;
int main(int argc,char*argv[]){
//检查这是否是副本:
if(argv[0].find(argv[1])!=string::npos){
系统(“taskkill-IM myOLDfile.exe”);//停止旧的运行,
系统(“del myOLDfile.exe”);//然后删除它。
}
ifstream本身(argv[0]);//argv[0]是程序本身
字符串完整代码;
弦线;
if(file.is_open()){
while(file.good()){
getline(我自己,line);
行。追加(“\n”);
fullcode.append(行);
}
}
我自己;
//对这里的代码执行任何需要执行的操作。
流新代码(“myNEWfile.exe”);
newcode.write(完整代码);
newcode.close();
系统(“myNEWfile.exe myNEWfile.exe”);//启动新文件。而且,不是打字错误。
}

祝你的项目好运

这正是需要的,还是您不能将平面文件存储在磁盘上?在我看来,这是一个基于理解不足的感知需求,而不是实际需求。我可能是错的,但有效使用它的人很少。真正的核心解决方案是修改当前内存转储(您对PE头和节了解多少?),然后将其转储到文件中(或复制自身并修改…),但我怀疑有任何方法可以让这成为可能,而不杀死一个进程并创建另一个进程(你可以通过终止时执行的bat脚本交换文件)。我怀疑即使是
UpdateResource
也不能在当前运行的可执行文件上工作。我同意其他人的看法,您的要求是不现实的。要求是可执行文件将生成一些数据,这些数据必须在程序安装的整个生命周期内保持不变。该程序存储在NV内存中,可能会在注册表中过期。此外,它也可能在敌对环境中运行,在这种环境中,其他程序将尝试随机删除或修改文件(包括我的数据文件)。我的另一个选择(看起来越来越有可能)是,我必须保持该数据文件的句柄处于打开状态,以便操作系统锁定它并保护它不被修改/删除。