在.NET中注册文件类型和自定义文档图标

6
我有一个生成文件的应用程序。我想将这些文件与应用程序连接起来,以便双击文件启动我的应用程序。
除了麻烦的是图标看起来和我的应用程序的图标一样之外,一切都正常工作。我希望应用程序有一个图标,它的文档有一个图标。
注册表中DefaultIcon值需要使用“app.exe,1”语法,其中1是图标索引。似乎.NET资源不是Win32资源。
我尝试过以下方法,但没有成功:
1. 将文件的构建操作选择为“嵌入式资源”。 2. 在资源文件中添加图标。
唯一有效的方法是将图标文件与可执行文件分开,并指向它。然而,这对我来说好像是放弃了。
有什么解决办法吗?
4个回答

5
你尝试将2设置为图标索引了吗?
编辑: 我找到了一种方法,但是每次新建时都要重复此操作。
1. 在Visual Studio中打开.exe文件(文件->打开文件) 2. 右键单击图标文件夹,选择添加资源 3. 点击导入按钮 4. 选择你的.ico文件 5. 你可能需要调整图标编号,我认为最低编号(例如101)将是应用程序的图标 6. 记住新图标编号并将其设置为索引
编辑2: 尝试阅读这篇文章:http://www.codeproject.com/KB/dotnet/embedmultipleiconsdotnet.aspx

是的,我尝试了很多数字。唯一返回任何内容的是32512。那是我的应用程序图标。没有数字会返回文档图标。 - Josip Medved

1
如果您正在使用Wix工具集(http://www.wixtoolset.org)来安装应用程序,则可以让Wix负责文件类型和文档图标注册。
以下是我的神奇Wix咒语:
    <!-- Your executable -->
    <File 
        Id="MaAppExe" 
        Name="MyApp.exe" 
        Source="MyApp.exe" KeyPath="yes" >
    </File>

    <!-- your document icon -->
    <File 
        Id='IconMyAppDoc.ico' 
        Name='IconMyAppDoc.ico' 
        Source='$(var.MyApp.ProjectDir)\Resources\Images\Icons\docicon.ico' />

    <-- File Extension and associated document icon -->
    <ProgId 
        Id='MyApp.MyAppExtension' 
        Description='My App Data File' 
        Icon='IconMyAppDoc.ico'>
        <Extension 
            Id='MyApp' 
            ContentType='text/plain'>
            <Verb 
                Id='open' 
                Command='Open' 
                TargetFile="MyAppExe" 
                Argument='"%1"' />
         </Extension>
    </ProgId>
</Component>

0

DefaultIcon 还可以接受一个指向有效 .ico 文件的路径作为图标。


那个方法可以运行,正如我在问题中所指出的,但它似乎不太对。 - Josip Medved

0

你必须确保在项目中有Win32图标,而不仅仅是.net图标。我希望有人能指出一种简单的方法来做到这一点,但与此同时,以下是方法:

编译你的程序集,然后从Visual Studio选择“文件->打开->打开文件”,打开已编译的程序集。添加你想要用于文档的图标,并将其ID设置为高于应用程序中使用的ID。保存程序集。现在你就有了Win32资源。

-- 编辑 --
在编辑他的帖子之后,ZippyV似乎有一个非常好的答案。


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