Регистрация типа файла и значка пользовательского документа в .NET

StackOverflow https://stackoverflow.com/questions/1203755

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

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

Я попытался следовать за ним, но безуспешно:

  1. Опции "встроенный ресурс", а файл построим действий.
  2. Добавление значка в файл ресурсов.

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

Есть идеи, как это решить?

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top