0

我正在尝试更改我的一个 exe 文件的文件版本,由于某种原因,我收到一条错误消息,表明我尝试写入的内存受到保护,然后我收到一条消息,指出外部组件引发了异常。我不确定我在这里做错了什么,任何帮助将不胜感激。

   Public Sub ChangeVersion(ByVal FILE As String)
            Dim handle As IntPtr = BeginUpdateResource(FILE, False)
            Dim ver As String = "2.0.0.0"
            UpdateResource(handle, "RT_VERSION", "FILEVERSION", MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), ver, ver.Length)
            EndUpdateResource(handle, False)
   End Sub
4

1 回答 1

1

从文档链接的Using Resources示例说,您必须先使用,然后才能调用and 。UpdateResourceFindResourceLoadResourceLockResourceBeginUpdateResourceUpdateResource

  1. 使用该LoadLibrary函数加载可执行文件 Hand.exe。
  2. 使用FindResourceLoadResource函数定位和加载对话框资源。
  3. 使用该LockResource函数检索指向对话框资源数据的指针。
  4. 使用该BeginUpdateResource函数打开 Foot.exe 的更新句柄。
  5. 使用该UpdateResource函数将对话框资源从 Hand.exe 复制到 Foot.exe。
  6. 使用该EndUpdateResource功能完成更新。

(在调用下一个函数之前,您也没有对返回值进行任何检查。例如,如果BeginUpdateResource失败(例如,因为您没有LockResource首先调用),它返回NULL或为零,如果是,您不应该调用UpdateResource.UpdateResource返回一个BOOL指示它是否成功的,如果不是,你不应该调用EndUpdateResource.总是检查 API 调用的返回值——它们的存在是有原因的,忽略它们是个坏主意。)

于 2013-07-06T02:16:31.310 回答