鱼C论坛

 找回密码
 立即注册
查看: 44|回复: 1

如何修改EXE程序的图标

[复制链接]
发表于 昨天 16:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Windows系统上APP都会有自己的图标,但用mingw编译出来的EXE文件图标都是一个样,我们如何让自己的应用拥有自己的图标

还有一些软件下载后是一个安装包,用户通过运行安装包配置软件的环境以及生成应用程序的一系列初始操作,这个功能通常是如何实现的,C语言可以实现这个功能吗
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 昨天 16:35 | 显示全部楼层
### 如何修改EXE程序的图标?
使用MinGW编译时,可通过资源文件(.rc)自定义图标。步骤如下:

1. **准备图标文件**  
   - 创建或转换一个 .ico 格式的图标文件(如 myicon.ico)。  
   - 推荐尺寸:64x64、32x32、16x16(Windows支持多分辨率嵌入)。

2. **创建资源描述文件**  
   新建文本文件 app.rc,内容为:
  

  1.    MAIN_ICON ICON "myicon.ico"
  2.    
复制代码


3. **编译资源文件**  
   使用MinGW的 windres 工具生成对象文件:
  

  1.    windres app.rc -o app_res.o
  2.    
复制代码


4. **编译并链接程序**  
   将资源对象文件加入编译命令:
  

  1.    gcc main.c app_res.o -o myapp.exe
  2.    
复制代码


---

### 安装包功能如何实现?C语言能否做到?
#### 安装包的核心功能
1. 解压文件到目标目录(如程序本体、依赖库)
2. 创建快捷方式(桌面/开始菜单)
3. 注册表操作(文件关联、卸载信息)
4. 执行初始化(生成配置文件、注册服务等)

#### C语言实现方案
**可以!** 通过调用Windows API实现:
  1. #include <windows.h>

  2. int main() {
  3.     // 示例:创建安装目录
  4.     CreateDirectory("C:\\MyApp", NULL);

  5.     // 示例:解压文件(需自行实现解压逻辑)
  6.     extract_files_from_resource();

  7.     // 示例:创建桌面快捷方式(需调用COM接口)
  8.     create_shortcut("C:\\MyApp\\app.exe", "MyApp");

  9.     // 示例:写入卸载注册表信息
  10.     RegSetKeyValue(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MyApp", "DisplayName", REG_SZ, "MyApp", 12);
  11.     return 0;
  12. }
复制代码


#### 关键技术点
1. **文件嵌入**  
   将待安装文件作为资源编译进安装程序:
   - 资源文件 installer.rc 示例:
   

  1.      BINARY_DATA RCDATA "files.zip"
  2.      
复制代码

   - 运行时用 FindResource + LoadResource 读取资源并解压。

2. **快捷方式创建**  
   需调用COM组件(IShellLinkIPersistFile),代码较复杂(约50行)。

3. **注册表操作**  
   使用 RegCreateKeyExRegSetValueEx 等API。

---

### 注意事项
1. **图标修改**  
   - 确保 .ico 文件包含多个分辨率(推荐工具:Greenfish Icon Editor)。
   - 资源文件中的 MAIN_ICON 是默认图标标识符。

2. **安装程序开发建议**  
   - 直接使用现有工具更高效(如 Inno SetupNSIS)。
   - 纯C实现需处理大量底层API,适合学习或轻量需求。

3. **权限问题**  
   - 写入 Program Files 或注册表需管理员权限,可在清单文件中声明:
   

  1.      <requestedExecutionLevel level="requireAdministrator" />
  2.      
复制代码


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-13 19:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表