在WPF EXE中嵌入多个图标

7
我是一名有用的助手,可以为您翻译文本。

我有一个WPF程序集,我想嵌入五个图标,用于与我的应用程序相关联的不同文件类型。 如何将这些图标嵌入到我的EXE中?

谢谢@smoore @Groky @ChrisF. 不幸的是,这不是我要问的问题。我发现我的问题相当模糊0_­°。请允许我重新表述问题:


我在我的WPF项目中有图标,例如Application.icoDocument.ico等作为资源。在大多数情况下,我使用以下方法访问这些图标:

<Image Source="/MyAssembly;component/Resources/Icons/Application.ico" />

那种方法每次都有效。我知道。


我的问题是如何在注册表中使用与Windows资源管理器相同的图标进行文件关联。我希望能够通过像这样的路径访问这些图标:

C:\Program Files\MyApp\MyApp.exe,1

就像在 HKEY_CLASSES_ROOT 中与文件类型相关联的图标一样。

据我所知,我应该使用资源文件 (.rc),将其编译并与我的 EXE 合并。大致如下:

101 RT_ICON Application.ico
102 RT_ICON Document.ico
// etc...

这是WPF中正确的方法吗?是否有替代方法,特别是因为此方法似乎会导致从我的AssemblyInfo.cs中擦除程序集版本信息。我仍然准备在资源中编写版本信息而不是程序集的信息。

5个回答

4
我找到了一个解决方案!它不是完美的,但它可以做我想要的事情!由于我利用了漫长的斯堪的纳维亚之夜来寻找解决方案,所以我觉得我必须在这里分享它。
以下是我的步骤:
1)编写了一个简单的控制台C#应用程序。
class ResTest {
    static void Main() {
        System.Console.WriteLine("Hello World!");
    }
}

2) 运行 csc restest.cs 命令来测试我的代码是否正常。

3) 打开记事本,创建一个名为 App.rc 的文件,并在其中写入以下内容。

101 ICON "Application.ico"
102 ICON "Document.ico"
103 ICON "Help.ico"

4) 运行 rc /v App.rc,使用 资源编译器。一个新的文件 App.res 将会出现。

5) 重新运行 csc,但这一次:

csc /win32res:App.res restest.cs

6) restest.exe现在拥有ID为101的图标,我可以在Axialis IconWorkshop中找到另外两个图标。


现在,我注意到我的程序集信息(版本、产品名称等)已经消失了。我搜索了VS_VERSION_INFO并查看了MSDN关于VERSIONINFO结构体的文章,该结构体在RC文件中定义了我需要的属性。

我更希望有一种更“自动化”的方法,但我必须使用C# Express和Windows Vista SDK尽力而为。

-- 希望这能对您有所帮助...


4
  1. Create App.rc:

    101 ICON "Application.ico"
    102 ICON "Document.ico"
    103 ICON "Help.ico"
    
  2. Compile:

    rc App.rc
    
  3. Add App.res to your project (leave None as your Build Action).
  4. Build.

所有工作完成!


谢谢,那正是我的答案。 - Minustar
2
并不完全一样。我的使用了一些Visual Studio... - Dmitry Shechtman

3

我刚刚创建了一个简单的工具,可以在不必深入. res文件的情况下完成这个任务。(如果您管理自己的.res文件,将无法自动创建清单和版本资源)。这是一个微小的实用程序,您可以将其作为Post-Build事件的一部分使用,并允许您将特定文件夹中的所有图标文件添加到您的程序集中。假设您的主项目文件夹下有一个icons文件夹,您可以添加以下Post-Build事件:

C:\path\to\InsertIcons.exe $(TargetPath) $(ProjectDir)icons

更多详细信息和下载请访问http://einaregilsson.com/add-multiple-icons-to-a-dotnet-application/


1
InsertIcons 项目可以完美地与 .NET Framework 生成的可执行文件配合使用。是否有计划添加对 .NET 5 的支持? - Alexandru Dicu

2

项目属性 -> 资源 -> 添加资源 -> 添加新图标 / 添加现有文件(取决于您是否已经制作了图标)


1

除了将文件添加到项目资源中,您还可以将文件添加到项目中并将其构建操作设置为资源。

然后,您可以使用 Source 属性从 XAML 引用这些文件。例如,在“资源”目录中的文件 Icon.png 将使用以下方式加载:

<Image Source="/Resources/Icon.png"/>

如果要从代码中加载文件,则可以使用以下代码:

new BitmapImage(new Uri(@"pack://application:,,,/Resources/Icon.png"))

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