如何效仿Windows Forms导入器将媒体文件嵌入编译程序并隐藏?
将图标嵌入程序集以隐藏外部资源的解决方案
步骤1:将图标设置为嵌入式资源
- 在Visual Studio中,右键你的项目 → 「添加」→ 「现有项」,选中
Assets/ico/16x.ico文件添加到项目中(若已在项目内可直接跳过此步) - 选中该图标文件,在右侧属性窗口中:
- 将「生成操作」改为 嵌入式资源
- 将「复制到输出目录」改为 不复制
步骤2:修改代码从程序集读取图标
无需再通过文件路径加载资源,直接从当前程序集的嵌入式资源中读取流来创建图标:
public void Init() { try { // 替换为你的项目命名空间+资源路径(路径用点分隔,例:项目命名空间是MyApp,资源名就是MyApp.Assets.ico.16x.ico) string resourceName = "YourProjectNamespace.Assets.ico.16x.ico"; using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) { if (stream == null) { throw new FileNotFoundException("未找到嵌入式图标资源", resourceName); } SpawnTray(stream); } } catch (Exception ex) { MsgClass.Init(ex.Message, MessageBoxIcon.Error); System.Environment.Exit(1); } } private void SpawnTray(Stream iconStream) { Icon_x = new NotifyIcon(); Icon_x.Icon = new Icon(iconStream); Icon_x.Visible = true; }
注意事项
- 确认资源名称:资源名称格式为「项目命名空间.文件夹层级.文件名」,如果不确定具体名称,可以用以下代码列出所有嵌入式资源来核对:
foreach (string name in Assembly.GetExecutingAssembly().GetManifestResourceNames()) { Console.WriteLine(name); } - 这种方式和WinForms内置的资源导入逻辑完全一致,图标会被直接编译进最终的.exe文件,终端用户看不到单独的Assets文件夹和图标文件。
内容的提问来源于stack exchange,提问作者Caio Silva
相关产品推荐
相关产品推荐

