如何更改可执行文件的属性?(Windows)

28

当我创建一个.exe文件时,我可以右键点击它,然后进入属性->详细信息。然后我会得到一个列表,例如:

File Description | 
Type             | Application
File Version     | 
Product Name     | 
Product Version  |
Copyright        | 
Size             | 18.0 KB
Date Modified    | 6/16/2009 8:23 PM
Language         |
我该如何改变这些属性?(另外,有没有办法改变图标?)

2
你正在编译一个可执行文件,还是一个你无法访问源代码的可执行文件? - DeadHead
1
这是我已经从C++代码编译出来的可执行文件。 - user98188
1
@Keand64:如果你想手动更改它,你可以在Visual Studio中使用“文件”->“打开”来打开exe文件并轻松修改资源。 - Mehrdad Afshari
6个回答

30
如果你正在使用C/Win32,你可以在你的项目中添加类似于这样的内容,封装在一个*.rc(资源)文件中:
VS_VERSION_INFO VERSIONINFO
 FILEVERSION    0,0,0,2
 PRODUCTVERSION 0,0,0,2
 FILEFLAGSMASK 0x3fL
 #ifdef _DEBUG
 FILEFLAGS 0x1L
 #else
 FILEFLAGS 0x0L
 #endif
 FILEOS 0x4L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
{
    BLOCK "StringFileInfo"
    { 
        BLOCK "040904b0"
        {
            VALUE "Comments",         "comment\0"
            VALUE "CompanyName",      "comment\0"
            VALUE "FileDescription",  "base file\0"
            VALUE "FileVersion",      "0.0.0.2 TP\0"
            VALUE "InternalName",     "testTP\0"
            VALUE "LegalCopyright",   "none\0"
            VALUE "OriginalFilename", "test.exe\0"
            VALUE "ProductName",      "test\0"
            VALUE "ProductVersion",   "0.0.0.2 TP\0"
        } 
    }
    BLOCK "VarFileInfo"
    {
        VALUE "Translation", 0x409, 1200
    }
}

4
你能详细说明一下吗? - user98188
4
您可以在MSDN/VERSIONINFO网站上获取更多信息。不过,我可以简要介绍一下在C语言中如何实现这个功能(我不确定在C++中是否是首选方法,但我不知道您是在使用C++)。我会添加一个资源文件(例如main.rc)到我的项目中,并按照上面的代码进行编辑(请参考MSDN)。重新编译后,我的.exe文件就包含了所有相关信息。如果我没记错的话,在.NET中,您也可以通过[assembly: AssemblyTitle("title")]命令来实现同样的功能。 - merkuro
另外,如果您恰好正在使用MinGW(就像我一样),则在编译资源文件以将其链接到exe以提供此信息时,不应该使用rc,而应该使用windres:http://www.mingw.org/wiki/MS_resource_compiler。 MSDN链接和该链接应足以让您将此额外信息添加到您的EXE中。 - abelito
1
创建了这样一个.rc文件后,您可以使用GoRC将其编译为.res文件,方法是使用gorc /fo Resources.res Resources.rc。然后,您可以使用Resource Hacker将其添加到现有的.exe中,方法是使用ResHacker -add prog.exe, prog.exe, Resources.res,,,(摘自我的答案这里)。 - Danny Beckett

10

如果您想在已编译的可执行文件上更改FileDescription或任何其他版本资源字符串,rcedit(一个小型的开源工具)可以很容易地完成:

$ rcedit MyApp.exe --set-version-string FileDescription "My Awesome App"

2
rcedit在设置属性方面相当有限。 - ashes999
1
你可以使用这个工具设置所有内容,请参见 https://github.com/electron/rcedit/issues/2#issuecomment-111470339 - g.breeze
这对我有用,但它会删除可执行文件的数字签名属性。 - AbhishekS
1
@AbhishekS 可能是因为修改后任何签名都会失效。您可能需要运行类似 SignTool.exe 的程序。 - a paid nerd

8

如果您正在使用Visual Studio,这将非常容易:

  • 在项目中右键单击“Resource Files”文件夹
  • 点击“添加”,然后选择“资源”
  • 从弹出对话框中选择“版本”

然后可以双击文件以在Visual Studio中打开它,并获得方便的编辑器来更改值。

您的值将自动链接到EXE中。


6
这是一个简单的文件版本信息资源。对于已经存在的文件,您可以使用任何资源编辑器(例如Resource Hacker,它已经过时但仍然不错)来编辑此信息。您也可以通过这种方式更改图标。
如果您创建自己的应用程序,则设置取决于您使用的工具。例如,在Visual Studio中,您必须查看项目属性。


-1
对于.NET,可以搜索“设置程序集属性”以获取有关可用属性的信息。然后您可以像这样使用这些属性...
using System.Reflection;  // Needed to get to the attributes.

[assembly:AssemblyTitle("My File Description")]
[etc.]

7
这不是一个答案。提问者希望在C WinAPI中获得解决方案,而不是.NET C#。 - dns

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接