Làm cách nào để đặt thông tin phiên bản cho .exe, .dll hiện có?


113

Là một phần của quá trình xây dựng của chúng tôi, tôi cần đặt thông tin phiên bản cho tất cả các tệp nhị phân đã biên dịch của chúng tôi. Một số mã nhị phân đã có thông tin phiên bản (được thêm vào lúc biên dịch) và một số thì không.

Tôi muốn có thể áp dụng các thông tin sau:

  • Tên công ty
  • Thông báo Bản quyền
  • tên sản phẩm
  • Mô tả Sản phẩm
  • Phiên bản tập tin
  • Phiên bản sản phẩm

Tất cả các thuộc tính này được chỉ định bởi kịch bản xây dựng và phải được áp dụng sau khi biên dịch. Đây là các mã nhị phân chuẩn (không phải hợp ngữ) được biên dịch bằng C ++ Builder 2007.

Tôi có thể làm cái này như thế nào?


ResourceHacker sử dụng để làm gì ? chính xác nhiệm vụ được thiết lập như thế nào? trong những gì vấn đề sử dụng UpdateResourcechức năng, nhiệm vụ nếu cập nhật phiên bản trong pe hiện
RbMm

Hãy thử điều này: alternativeto.net/software/xn-resource-editor , tôi nghĩ rằng có các công cụ kỹ thuật đảo ngược làm điều này
i_thamary

Câu trả lời:


59

Mặc dù đây không phải là một quy trình hàng loạt, Visual Studio cũng có thể thêm / chỉnh sửa tài nguyên tệp.

Chỉ cần sử dụng File-> Open-> File trên .EXE hoặc .DLL. Điều này rất hữu ích để sửa thông tin phiên bản sau khi xây dựng hoặc thêm nó vào các tệp không có các tài nguyên này để bắt đầu.


8
Điều này đã hoạt động hoàn hảo khi tôi thử nó. Đối với tệp bị thiếu hoàn toàn thông tin phiên bản: Sau khi mở DLL trong Visual Studio, đi tới Chỉnh sửa> Thêm tài nguyên> Phiên bản và nhấp vào Mới. Sau đó, trong tab Phiên bản mới, hãy thay đổi FILEVERSION và PRODUCTVERSION, CompanyName, v.v. Lưu tệp và bạn đã sẵn sàng!
twasbrillig

2
@UweBaemayr. câu trả lời mà bạn đã trích dẫn Tôi muốn hỏi giống như liệu chúng ta có thể tự động hóa nó như chính xác là tôi thực hiện cùng một bản dựng bài đăng và tôi muốn tự động hóa nó. Nhưng bằng cách nào ?
SteveScm

1
Đối với dll Delphi win32 cũ của tôi, điều này không hoạt động. Altough thông tin dll được thay đổi chính xác, khi chạy kiểm tra sự tỉnh táo, bạn nhận ra nó bị hỏng.
sthiers

3
Đã thử điều này (thêm thông tin phiên bản) trên Windows 8, VS 2015 và tất cả đều tốt trong Windows Explorer, ngoại trừ ... tệp thực thi sẽ không bắt đầu nữa.
Liviu

36

Không giống như nhiều câu trả lời khác, giải pháp này sử dụng phần mềm hoàn toàn miễn phí.

Đầu tiên, tạo một tệp có tên Resources.rcnhư sau:

VS_VERSION_INFO VERSIONINFO
    FILEVERSION    1,0,0,0
    PRODUCTVERSION 1,0,0,0
{
    BLOCK "StringFileInfo"
    {
        BLOCK "040904b0"
        {
            VALUE "CompanyName",        "ACME Inc.\0"
            VALUE "FileDescription",    "MyProg\0"
            VALUE "FileVersion",        "1.0.0.0\0"
            VALUE "LegalCopyright",     "© 2013 ACME Inc. All Rights Reserved\0"
            VALUE "OriginalFilename",   "MyProg.exe\0"
            VALUE "ProductName",        "My Program\0"
            VALUE "ProductVersion",     "1.0.0.0\0"
        }
    }
    BLOCK "VarFileInfo"
    {
        VALUE "Translation", 0x409, 1200
    }
}

Tiếp theo, sử dụng GoRC để biên dịch nó thành một .restệp bằng cách sử dụng:

GoRC /fo Resources.res Resources.rc

(xem bình luận của tôi bên dưới để biết GoRC.exe)

Sau đó, sử dụng Resource Hacker ở chế độ CLI để thêm nó vào hiện có .exe:

ResHacker -add MyProg.exe, MyProg.exe, Resources.res,,,

Đó là nó!


1
@CharlesB Bản thân tôi cũng nhận thấy điều đó, nhưng đó là liên kết phù hợp. Có vẻ như ai đó đã quên thanh toán cho máy chủ web của họ! Đây là nhị phân, tôi đã nhân đôi nó vào tài khoản Assembla công cộng của tôi: assembla.com/code/danny-beckett/subversion/nodes/13/GoRC.exe
Danny Beckett

3
Bạn cũng có thể sử dụng Trình biên dịch tài nguyên Microsoft thay cho GoRC. Nó có sẵn với Windows SDK.
Nhà phát triển toàn diện

Đồng ý cho Resource Hacker, tôi đã sử dụng nó dựa trên câu trả lời này và nó là một chương trình tuyệt vời, tuyệt vời. (không có ái lực với chương trình hoặc nhà sản xuất ;-)
user2109254

@UweKeim Tôi đã không sử dụng cái này một thời gian, nhưng tôi khá chắc chắn rằng chúng được yêu cầu.
Danny Beckett

6
Có vẻ như dòng lệnh đã thay đổi một chút: ResourceHacker.exe -open Source.dll -save Changed.dll -action addoverwrite -resource Version.resNgoài ra, ResourceHacker có thể biên dịch tập tin rc chính nó:ResourceHacker.exe -open Version.rc -save Version.res -action compile
Yusuf Tarık Gunaydin

23

Hoặc bạn có thể kiểm tra StampVer phần mềm miễn phí cho các tệp exe / dll Win32.
Nó sẽ chỉ thay đổi tệp và phiên bản sản phẩm nếu chúng đã có tài nguyên phiên bản. Nó không thể thêm tài nguyên phiên bản nếu tài nguyên đó không tồn tại.


19

rcedit là tương đối mới và hoạt động tốt từ dòng lệnh: https://github.com/atom/rcedit

$ rcedit "path-to-exe-or-dll" --set-version-string "Comments" "This is an exe"
$ rcedit "path-to-exe-or-dll" --set-file-version "10.7"
$ rcedit "path-to-exe-or-dll" --set-product-version "10.7"

Ngoài ra còn có một mô-đun NPM gói nó khỏi JavaScript và một nhiệm vụ Grunt trong trường hợp bạn đang sử dụng Grunt.


5
lưu ý rằng rcedit chỉ có thể sửa đổi các nguồn lực hiện có không chèn những cái mới
Bevan Collins

2
Không hoạt động với kho lưu trữ sfx 7zip: / Chỉ cần cắt phần lưu trữ 7zip.
Mgamerz

1
cố gắng này, giữ cho không thể tải tập tin khi trong cùng thư mục và có vẻ như công cụ này có thể phụ thuộc vào cấu hình máy chủ
Arijoon

Làm việc với bản gốc 7zS.sfx, phần đầu tiên với VERSIONINFO bên trong mà bạn sử dụng để kết hợp với nhau một kho lưu trữ tự giải nén. Theo cách thủ công, bạn cũng có thể đổi tên 7zS.sfx trong 7zS.exe và chỉnh sửa nó trong Visual Studio nhưng vì số phiên bản đang thay đổi cho mọi bản dựng nên bạn thích một tệp hàng loạt có câu lệnh rcedit bên trong để đặt nó.
AndresRohrAtlasInformatik

1
công cụ này rất khó chịu, vui lòng xem lỗi này trước khi áp dụng nó vào tệp nhị phân của bạn: github.com/electron/rcedit/issues/51
Brun

14

Những gì về một cái gì đó như thế này?

verpatch /va foodll.dll %VERSION% %FILEDESCR% %COMPINFO% %PRODINFO% %BUILDINFO%

Có sẵn ở đây với đầy đủ các nguồn .


Verpatch dường như đã tạo ra một tài nguyên phiên bản sản phẩm xấu cho tôi (sử dụng /va /pvtùy chọn). Phiên bản xuất hiện chính xác trong Windows Explorer nhưng ký tự cuối cùng bị thiếu khi truy xuất trong mã với VerQueryValue. Để khắc phục tài nguyên bị lỗi, tôi đã làm như sau: (1) Tải DLL trong Resource Hacker. (2) Xem tài nguyên phiên bản. (3) Biên dịch (sửa đổi một cái gì đó sau đó thay đổi nó trở lại để kích hoạt nút). (4) Lưu.
dan-gph

verpatch hoạt động tốt cho cả phiên bản x64 và x86 của các tệp DLL trên hộp nhà phát triển của tôi, tuy nhiên trong dự án xây dựng apveyor, nó chỉ hoạt động cho x64 và nó hoàn toàn không làm gì với dll x86 - cũng không có lỗi! bất kỳ gợi ý điều gì có thể xảy ra? Tôi có thể thấy trong nhật ký ứng dụng, lệnh verpatch đang thực thi, không có lỗi và dll không được thay thế bằng cách nào đó và kết thúc là nó không có tem phiên bản; đối với x64, mọi thứ hoạt động tốt trong mọi tình huống. bất kỳ manh mối xin vui lòng?
Ovi

@ Ovi-Wan Kenobi: Tôi không biết băng tải là gì, nhưng theo mô tả của bạn, đối với tôi nó giống như một vấn đề về băng tải hơn. ? Tại tồi tệ nhất, nếu đó là có thể, chuẩn bị sẵn sàng cho một số lỗi trong môi trường apveyor ...
filofel

10

Có công cụ này ChangeVersion [1]

Danh sách các tính năng (từ trang web):

  • giao diện dòng lệnh
  • hỗ trợ cho các tệp .EXE, .DLL và .RES
  • cập nhật FileVersion và ProductVersion dựa trên mặt nạ phiên bản
  • thêm / thay đổi / xóa chuỗi khóa phiên bản
  • điều chỉnh cờ tệp (gỡ lỗi, đặc biệt, riêng tư, v.v.)
  • cập nhật tệp dự án (.bdsproj | .bpr | .bpk | .dproj)
  • thêm / thay đổi biểu tượng ứng dụng chính
  • sử dụng tệp ini với cấu hình
  • Hỗ trợ Windows Vista (cần nâng cấp)
  • dễ dàng tích hợp vào môi trường xây dựng liên tục

Tiết lộ đầy đủ: Tôi biết người đã viết công cụ này, tôi đã từng làm việc với anh ta. Nhưng điều này cũng có nghĩa là tôi biết anh ấy tạo ra phần mềm chất lượng;)


[1] liên kết đã chết. Dường như có phiên bản được sao chép tại download.cnet.com .


@Gareth Tôi đã thêm một liên kết nhân bản. Mặt khác, tôi nghi ngờ rằng câu trả lời này có bất kỳ giá trị nào mà không có bất kỳ tài liệu tham khảo hiệu quả nào.
Wolf,

5
Liên kết thứ hai dẫn đến một công cụ đã hết hạn"Change Version v2012.9.6.0 - (C)2007-2012 The-Software-Box.com This trial version has expired"
Sangha

2
Khi chạy nó trong dòng lệnh, nó nói "Thay đổi bản v2012.9.6.0 - (C) 2007-2012 The-Software-Box.com phiên bản thử nghiệm này đã hết hạn"
RDeveloper

10

Tôi đang làm điều đó mà không có công cụ bổ sung. Tôi vừa thêm các tệp sau vào dự án ứng dụng Win32 của mình.

Một tệp tiêu đề xác định một số hằng số mà chúng ta có thể sử dụng lại trên tệp tài nguyên của mình và thậm chí trên mã chương trình. Chúng tôi chỉ cần duy trì một tệp. Cảm ơn nhóm Qt đã chỉ cho tôi cách thực hiện trên một dự án Qt, hiện nó cũng hoạt động trên ứng dụng Win32 của tôi.

---- [version.h] ----

#ifndef VERSION_H
#define VERSION_H

#define VER_FILEVERSION             0,3,0,0
#define VER_FILEVERSION_STR         "0.3.0.0\0"

#define VER_PRODUCTVERSION          0,3,0,0
#define VER_PRODUCTVERSION_STR      "0.3.0.0\0"

#define VER_COMPANYNAME_STR         "IPanera"
#define VER_FILEDESCRIPTION_STR     "Localiza archivos duplicados"
#define VER_INTERNALNAME_STR        "MyProject"
#define VER_LEGALCOPYRIGHT_STR      "Copyright 2016 ipanera@gmail.com"
#define VER_LEGALTRADEMARKS1_STR    "All Rights Reserved"
#define VER_LEGALTRADEMARKS2_STR    VER_LEGALTRADEMARKS1_STR
#define VER_ORIGINALFILENAME_STR    "MyProject.exe"
#define VER_PRODUCTNAME_STR         "My project"

#define VER_COMPANYDOMAIN_STR       "www.myurl.com"

#endif // VERSION_H

---- [MyProjectVersion.rc] ----

#include <windows.h>
#include "version.h"

VS_VERSION_INFO VERSIONINFO
FILEVERSION     VER_FILEVERSION
PRODUCTVERSION  VER_PRODUCTVERSION
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904E4"
        BEGIN
            VALUE "CompanyName",        VER_COMPANYNAME_STR
            VALUE "FileDescription",    VER_FILEDESCRIPTION_STR
            VALUE "FileVersion",        VER_FILEVERSION_STR
            VALUE "InternalName",       VER_INTERNALNAME_STR
            VALUE "LegalCopyright",     VER_LEGALCOPYRIGHT_STR
            VALUE "LegalTrademarks1",   VER_LEGALTRADEMARKS1_STR
            VALUE "LegalTrademarks2",   VER_LEGALTRADEMARKS2_STR
            VALUE "OriginalFilename",   VER_ORIGINALFILENAME_STR
            VALUE "ProductName",        VER_PRODUCTNAME_STR
            VALUE "ProductVersion",     VER_PRODUCTVERSION_STR
        END
    END

    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1252
    END
END

2
Chỉ tò mò; Bạn đã làm cách nào để ngăn cửa sổ ghi đè lên tệp .rc của mình mỗi khi bạn thay đổi hộp thoại hoặc sửa đổi bất kỳ tài nguyên nào trong dự án? Tôi đã xem một vài bài báo như thế này cho đến nay và có vẻ như nó sẽ hoạt động nếu bạn không bao giờ phải thay đổi lại tài nguyên có thể gây ra tự động tạo bởi IDE.
shawn1874

@ shawn1874 - Bao gồm dòng #include <windows.h>trong resource.htệp được thêm tự động. Tệp đó không được tạo lại (lưu ý ở đầu tệp .rc, nó cho biết nó là mã được tạo và có thể được sửa đổi trong trình thiết kế).
CJBS

1
@CJBS không trả lời câu hỏi. Mặc dù điều đó có thể hiệu quả, nhưng nó không giải thích câu trả lời đã đăng có thể hoạt động như thế nào. Trong câu trả lời đã đăng, user3016543 bao gồm phiên bản.h trực tiếp trong tệp .rc. Có một số cách để đối phó với việc ghi đè lên tệp .rc mà tôi biết cách thực hiện. Tôi chỉ thắc mắc về cách mà câu trả lời cụ thể này được hiển thị bởi vì nó không phù hợp với tôi.
shawn1874

Tôi đoán rằng phương pháp đó phù hợp với anh ta vì thành phần được đề cập không có các thành phần hộp thoại nên tệp không được tạo lại thường xuyên hoặc bao giờ. Tuy nhiên, trong một ứng dụng windows có tài nguyên hộp thoại MFC thì điều đó sẽ không xảy ra.
shawn1874 06/06

1
Cảm ơn bạn đã nhắc nhở tôi về một kỹ thuật mà lần đầu tiên tôi thấy khi thực hiện trong một tệp tài nguyên được vận chuyển cùng với WinBatch Extender SDK. Đã quá lâu kể từ khi tôi cần nó đến nỗi tôi đã quên hầu hết các chi tiết. Lời giải thích của bạn đã đưa tất cả trở lại.
David A. Gray


6

Có nhiều công cụ, được đề cập bởi nhiều câu trả lời tuyệt vời, tôi sẽ chọn một công cụ.

Hacker tài nguyên

Tôi đã tải xuống phiên bản mới nhất ( 5.1.7 ) từ [AngusJ]: Resource Hacker . Tất cả thông tin cần thiết có thể được tìm thấy trên trang đó (tùy chọn dòng lệnh, tập lệnh, ...). Trong hướng dẫn sau, tôi sẽ thao tác trên 2 tệp thực thi (chuột thí nghiệm) mà (vì những lý do rõ ràng) tôi đã sao chép trong cwd của mình :

  • ResourceHacker.exe : Tôi nghĩ sẽ rất thú vị khi tự vận hành
  • cmake.exe : thực thi ngẫu nhiên mà không có Thông tin phiên bản được đặt (một phần của cài đặt v3.6.3 trên máy của tôi)

Trước khi đi sâu hơn, tôi muốn đề cập rằng ResourceHacker có một đầu ra đầu cuối vui nhộn và các đoạn sao chép / dán sau đây có thể tạo ra một chút nhầm lẫn.

1. Thiết lập

Đây giống như một bước sơ bộ, để làm quen với môi trường, cho thấy không có việc kinh doanh sôi nổi nào đang diễn ra, ...

e:\Work\Dev\StackOverflow\q000284258> sopr.bat
*** Set shorter prompt to better fit when pasted in StackOverflow (or other) pages ***

[prompt]> dir
 Volume in drive E is Work
 Volume Serial Number is 3655-6FED

 Directory of e:\Work\Dev\StackOverflow\q000284258

2019-01-28  20:09    <DIR>          .
2019-01-28  20:09    <DIR>          ..
2016-11-03  09:17         5,413,376 cmake.exe
2019-01-03  02:06         5,479,424 ResourceHacker.exe
2019-01-28  20:30               496 ResourceHacker.ini
               3 File(s)     10,893,296 bytes
               2 Dir(s)  103,723,261,952 bytes free

[prompt]> set PATH=%PATH%;c:\Install\x64\CMake\CMake\3.6.3\bin

[prompt]> .\cmake --help >nul 2>&1

[prompt]> echo %errorlevel%
0

[prompt]> .\ResourceHacker.exe -help

[prompt]>

==================================
Resource Hacker Command Line Help:
==================================

-help             : displays these abbreviated help instructions.
-help commandline : displays help for single commandline instructions
-help script      : displays help for script file instructions.




[prompt]> echo %errorlevel%
0

Như đã thấy, các tệp thực thi đều ổn, chúng chạy tốt và đây là cách Chi tiết của chúng (mà chúng tôi quan tâm) trông như thế nào:

Img0-Ban đầu

2. Tài nguyên

Tệp tài nguyên là tệp văn bản chứa tài nguyên. Một tài nguyên (được đơn giản hóa) có:

  • Tên
  • Kiểu
  • Giá trị

Để biết thêm chi tiết, hãy kiểm tra [MS.Docs]: About Resource Files . Có nhiều công cụ (được đề cập trong các câu trả lời hiện có) hỗ trợ chỉnh sửa tệp tài nguyên như:

  • VStudio tạo một cái mặc định khi bắt đầu một dự án mới
  • Người ta có thể tạo một tệp như vậy theo cách thủ công
  • Nhưng, vì nó là về Resource Hacker , và:

    • Nó có thể trích xuất tài nguyên từ tệp thực thi hiện có
    • Nó có các tài nguyên được nhúng trong đó (như trong hình trước)

    Tôi sẽ sử dụng nó cho bước này ( -action extract)

Tiếp theo, để một tài nguyên được nhúng vào .exe ( .dll , ...), nó phải được biên dịch sang dạng nhị phân, phù hợp với định dạng PE . Một lần nữa, có rất nhiều công cụ có thể đạt được điều này, nhưng như bạn có thể đoán, tôi sẽ gắn bó với Resource Hacker ( -action compile).

[prompt]> :: Extract the resources into a file
[prompt]> .\ResourceHacker.exe -open .\ResourceHacker.exe -save .\sample.rc -action extract -mask VersionInfo,, -log con

[prompt]>

[28 Jan 2019, 20:58:03]

Current Directory:
e:\Work\Dev\StackOverflow\q000284258

Commandline:
.\ResourceHacker.exe  -open .\ResourceHacker.exe -save .\sample.rc -action extract -mask VersionInfo,, -log con

Open    : e:\Work\Dev\StackOverflow\q000284258\ResourceHacker.exe
Save    : e:\Work\Dev\StackOverflow\q000284258\sample.rc


Success!

[prompt]> :: Modify the resource file and set our own values
[prompt]>
[prompt]> :: Compile the resource file
[prompt]> .\ResourceHacker.exe -open .\sample.rc -save .\sample.res -action compile -log con

[prompt]>

[28 Jan 2019, 20:59:51]

Current Directory:
e:\Work\Dev\StackOverflow\q000284258

Commandline:
.\ResourceHacker.exe  -open .\sample.rc -save .\sample.res -action compile -log con

Open    : e:\Work\Dev\StackOverflow\q000284258\sample.rc
Save    : e:\Work\Dev\StackOverflow\q000284258\sample.res

Compiling: e:\Work\Dev\StackOverflow\q000284258\sample.rc
Success!

[prompt]> dir /b
cmake.exe
ResourceHacker.exe
ResourceHacker.ini
sample.rc
sample.res

Trong trường hợp của bạn, lưu và chỉnh sửa tệp tài nguyên sẽ không cần thiết, vì tệp đã có sẵn, tôi chỉ làm điều đó với mục đích minh họa. Dưới đây là tệp tài nguyên sau khi được sửa đổi (và do đó trước khi được biên dịch).

sample.rc :

1 VERSIONINFO
FILEVERSION 3,1,4,1592
PRODUCTVERSION 2,7,1,8
FILEOS 0x4
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
    BLOCK "040904E4"
    {
        VALUE "CompanyName", "Cristi Fati\0"
        VALUE "FileDescription", "20190128 - SO q000284258 demo\0"
        VALUE "FileVersion", "3.1.4.1592\0"
        VALUE "ProductName", "Colonel Panic\0"
        VALUE "InternalName", "100\0"
        VALUE "LegalCopyright", "(c) Cristi Fati 1999-2999\0"
        VALUE "OriginalFilename", "ResHack\0"
        VALUE "ProductVersion", "2.7.1.8\0"
    }
}

BLOCK "VarFileInfo"
{
    VALUE "Translation", 0x0409 0x04E4  
}
}

3. Nhúng

Điều này cũng sẽ được thực hiện bởi Resource Hacker ( -action addoverwrite). Vì các tệp .exe đã được sao chép nên tôi sẽ chỉnh sửa tài nguyên của chúng tại chỗ.

[prompt]> .\ResourceHacker.exe -open .\cmake.exe -save .\cmake.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con

[prompt]>

[28 Jan 2019, 21:17:19]

Current Directory:
e:\Work\Dev\StackOverflow\q000284258

Commandline:
.\ResourceHacker.exe  -open .\cmake.exe -save .\cmake.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con

Open    : e:\Work\Dev\StackOverflow\q000284258\cmake.exe
Save    : e:\Work\Dev\StackOverflow\q000284258\cmake.exe
Resource: e:\Work\Dev\StackOverflow\q000284258\sample.res

  Added: VERSIONINFO,1,1033

Success!

[prompt]> copy ResourceHacker.exe ResourceHackerTemp.exe
        1 file(s) copied.

[prompt]> .\ResourceHackerTemp.exe -open .\ResourceHacker.exe -save .\ResourceHacker.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con

[prompt]>

[28 Jan 2019, 21:19:29]

Current Directory:
e:\Work\Dev\StackOverflow\q000284258

Commandline:
.\ResourceHackerTemp.exe  -open .\ResourceHacker.exe -save .\ResourceHacker.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con

Open    : e:\Work\Dev\StackOverflow\q000284258\ResourceHacker.exe
Save    : e:\Work\Dev\StackOverflow\q000284258\ResourceHacker.exe
Resource: e:\Work\Dev\StackOverflow\q000284258\sample.res

  Modified: VERSIONINFO,1,1033

Success!

[prompt]> del /f /q ResourceHackerTemp.*

[prompt]> dir
 Volume in drive E is Work
 Volume Serial Number is 3655-6FED

 Directory of e:\Work\Dev\StackOverflow\q000284258

2019-01-28  21:20    <DIR>          .
2019-01-28  21:20    <DIR>          ..
2016-11-03  09:17         5,414,400 cmake.exe
2019-01-03  02:06         5,479,424 ResourceHacker.exe
2019-01-28  21:17               551 ResourceHacker.ini
2019-01-28  20:05             1,156 sample.rc
2019-01-28  20:59               792 sample.res
               5 File(s)     10,896,323 bytes
               2 Dir(s)  103,723,253,760 bytes free

Như đã thấy, tôi đã phải thực hiện một mẹo nhỏ ( gainarie ) vì tôi không thể (ít nhất là tôi không nghĩ mình có thể) sửa đổi .exe trong khi sử dụng.

4. Kiểm tra

Đây là giai đoạn tùy chọn, để đảm bảo rằng:

  • Các tệp thực thi vẫn hoạt động (chúng không bị xáo trộn trong quá trình này)
  • Các tài nguyên đã được thêm / cập nhật
[prompt]> .\cmake --help >nul 2>&1

[prompt]> echo %errorlevel%
0

[prompt]> .\ResourceHacker.exe -help

[prompt]>

==================================
Resource Hacker Command Line Help:
==================================

-help             : displays these abbreviated help instructions.
-help commandline : displays help for single commandline instructions
-help script      : displays help for script file instructions.




[prompt]> echo %errorlevel%
0

chi tiết của họ :

Img1-Final


@ColonelPanic: Cảm ơn bạn!
CristiFati,

Câu trả lời rất hay. Thật không may, ResourceHacker không còn được duy trì và hết bộ nhớ khi cố gắng chỉnh sửa tệp EXE lớn (tôi gặp lỗi khi cố mở exe 3GB).
Lews Therin

@LewsTherin: Phiên bản mới nhất (cũng được câu trả lời sử dụng) là từ 2019/01, vì vậy tôi muốn nói rằng nó được duy trì khá tốt. Vấn đề là nó 32bit . Bạn có thể liên hệ với các tác giả yêu cầu phiên bản 64bit (tôi cho rằng vì họ đã có mã nên sẽ không khó để xây dựng nó cho 64bit ).
CristiFati


3

Đến bữa tiệc hơi muộn, nhưng vì tôi đang tìm nó (và đôi khi tôi có thể cần phải tìm lại), đây là những gì tôi đã làm để đưa phiên bản, tên công ty, v.v. vào C ++ DLL của mình trong VS2013 Express:

  1. Đã tạo và chỉnh sửa tệp dllproj.rc, như đã chỉ ra trước đây.
  2. Đã thêm dòng "rc.exe dllproj.rc" làm bước tạo trước trong dự án DLL.
  3. Đã thêm dllproj.res vào thư mục tài nguyên cho dự án.

Hi vọng điêu nay co ich!


3

các trên câu trả lời từ @DannyBeckett đã giúp tôi rất nhiều,

Tôi đặt những thứ sau vào một tệp hàng loạt và tôi đặt nó trong cùng một thư mục nơi chứa ResourceHacker.exe và EXE mà tôi làm việc và nó hoạt động rất tốt. [bạn có thể chỉnh sửa nó để phù hợp với nhu cầu của mình]

    @echo off
    :start1
    set /p newVersion=Enter version number [?.?.?.?]:
    if "%newVersion%" == "" goto start1
    :start2
    set /p file=Enter EXE name [for 'program.exe' enter 'program']:
    if "%file%" == "" goto start2
    for /f "tokens=1-4 delims=." %%a in ('echo %newVersion%') do (set ResVersion=%%a,%%b,%%c,%%d)
    (
    echo:VS_VERSION_INFO VERSIONINFO
    echo:    FILEVERSION    %ResVersion%
    echo:    PRODUCTVERSION %ResVersion%
    echo:{
    echo:    BLOCK "StringFileInfo"
    echo:    {
    echo:        BLOCK "040904b0"
    echo:        {
    echo:            VALUE "CompanyName",        "MyCompany\0"
    echo:            VALUE "FileDescription",    "TestFile\0"
    echo:            VALUE "FileVersion",        "%newVersion%\0"
    echo:            VALUE "LegalCopyright",     "COPYRIGHT © 2019 MyCompany\0"
    echo:            VALUE "OriginalFilename",   "%file%.exe\0"
    echo:            VALUE "ProductName",        "Test\0"
    echo:            VALUE "ProductVersion",     "%newVersion%\0"
    echo:        }
    echo:    }
    echo:    BLOCK "VarFileInfo"
    echo:    {
    echo:        VALUE "Translation", 0x409, 1200
    echo:    }
    echo:}
    ) >Resources.rc     &&      echo setting Resources.rc
    ResourceHacker.exe -open resources.rc -save resources.res -action compile -log CONSOLE
    ResourceHacker -open "%file%.exe" -save "%file%Res.exe" -action addoverwrite -resource "resources.res"  -log CONSOLE
    ResourceHacker.exe -open "%file%Res.exe" -save "%file%Ico.exe" -action addskip -res "%file%.ico" -mask ICONGROUP,MAINICON, -log CONSOLE
    xCopy /y /f "%file%Ico.exe" "%file%.exe"
    echo.
    echo.
    echo your compiled file %file%.exe is ready
    pause

[như một lưu ý phụ, tôi cũng đã sử dụng hacker tài nguyên để biên dịch tệp res, không phải GoRC]


2

Bạn thực sự có thể thử tải xuống FVIE từ Liên kết tải xuống và thử chỉnh sửa thông tin cho bất kỳ tệp .exe nào.

(HOẶC LÀ)

Bạn có thể tải xuống StampVer - Bản dập tài nguyên phiên bản Win32 từ Liên kết tải xuống thực sự hữu ích cho các tệp .exe windows.

(HOẶC LÀ)

Bạn có thể sử dụng một công cụ lệnh có tên là RCEDIT . Tải xuống từ liên kết Nguồn Github và sau đó xây dựng bằng Visual Studio 2015 và sau đó bạn có các lệnh cụ thể để thay đổi phiên bản của tệp .exe. Xem liên kết Tài liệu để biết các lệnh có sẵn khác nhau.


1

Đây là công cụ tốt nhất mà tôi từng thấy cho công việc này, cho phép toàn quyền kiểm soát tất cả các tài nguyên tệp, bao gồm VersionInfo.

Xem: ResourceEditor của Anders Melander .


1
Tải xuống Trình chỉnh sửa tài nguyên (0 byte) bị hỏng.
Jack
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.