Регистрация типа файла и пользовательского значка документа в .NET - PullRequest
5 голосов
/ 30 июля 2009

У меня есть приложение, которое производит файлы. Я хотел бы связать эти файлы с приложением, чтобы двойное нажатие на файл запустило мое приложение.

Все работает правильно, кроме раздражения, что значок выглядит так же, как значок моего приложения. Я хотел бы иметь один значок для приложения и один значок для его документов.

Значение DefaultIcon в реестре требует синтаксиса "app.exe, 1", где 1 - индекс значка. Похоже, что ресурсы .NET не являются ресурсами Win32.

Я попробовал следующее, но безуспешно:

  1. Выбор «Встроенного ресурса» в качестве действие по сборке файла.
  2. Добавление значка в файл ресурсов.

Единственное, что сработало, это наличие файла значков, отделенного от исполняемого файла, и указание на него. Однако мне кажется, что это капитуляция.

Есть идеи, как решить эту проблему?

Ответы [ 4 ]

4 голосов
/ 30 июля 2009

Вы пробовали установить 2 в качестве индекса значков?

EDIT: Я нашел способ, но вы должны делать это снова для каждой новой сборки.

  1. Открыть файл .exe в Visual Studio (Файл -> Открыть файл)
  2. Щелкните правой кнопкой мыши значок папки и выберите Добавить ресурс
  3. Нажмите кнопку Импорт
  4. Выберите ваш .ico файл
  5. Возможно, вам придется возиться с номерами значков, я думаю, что наименьшее число (пример 101) будет значком приложения
  6. Запомните новый номер значка и установите его в качестве индекса

РЕДАКТИРОВАТЬ 2: Попробуйте эту статью: http://www.codeproject.com/KB/dotnet/embedmultipleiconsdotnet.aspx

1 голос
/ 13 августа 2015

Если вы используете набор инструментов 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 голосов
/ 30 июля 2009

Вы должны убедиться, что в вашем проекте есть значки Win32, а не только значки .net. Я надеюсь, что кто-то указывает на легкий способ сделать это, но в то же время, здесь идет ...

Скомпилируйте сборку, затем в Visual Studio выберите «Файл -> Открыть -> Открыть файл», откройте скомпилированную сборку. Добавьте значок, который вы хотите использовать для документов, и установите для его идентификатора значение, превышающее значение, используемое для вашего приложения. Сохраните сборку. Теперь у вас есть ресурсы Win32.

- Правка -
После редактирования его сообщения ZippyV, похоже, получил очень хороший ответ.

0 голосов
/ 30 июля 2009

DefaultIcon также примет путь к действительному файлу .ico в виде значка.

...