我一直在尝试以下一段不起作用的代码。我想要做的是开始执行我的exe(我使用VC6.0创建一个简单的基于对话框的应用程序),然后从这个应用程序内部修改自己存储在硬盘上的内容。
因此有一个exe的运行副本,从这个正在运行的副本中它将打开磁盘副本到缓冲区。一旦加载到缓冲区,然后开始搜索字符串。一旦找到该字符串,它将被另一个字符串替换,该字符串可能与原始字符串的大小不同。
现在我遇到了无法在磁盘上打开文件进行读/写的问题。 GetLastError返回以下错误“ERROR_SHARING_VIOLATION该进程无法访问该文件,因为它正被另一个进程使用。”。
所以我做了什么我将磁盘上的文件重命名为另一个名称(除扩展名外必须使用相同的名称)。有关共享违规的同样错误。我不知道为什么我得到这个共享违规错误代码为32.任何建议将不胜感激。我会在另一个帖子中问我问题的第二部分。
FILE * pFile;
pFile = fopen ("Test.exe","rb");
if (pFile != NULL)
{
// do something like search for a string
}
else
{
// fopen failed.
int value = GetLastError(); // returns 32
exit(1);
}
答案 0 :(得分:2)
阅读File Locking维基百科条目的Windows部分:您无法修改当前正在执行的文件。
您可以重命名和复制它们,但不能更改它们。所以你想做的事情根本不可能。 (重命名文件根本不解锁它,重命名后它仍然是同一个文件,因此仍然无法修改。)
您可以复制可执行文件,修改该副本,然后运行该文件。