Как зарегистрировать 64-битную или 32-битную DLL в проекте установки Visual Studio

Я создал проект установки для моего приложения C #, которое устанавливает мое программное обеспечение. Я понимаю, что могу добавить ссылку на сборку и добавить свою DLL в установщик таким образом (обрисовано в виде здесь).

Я хочу знать, как связать как 32-разрядную, так и 64-разрядную dll, и во время установки определить, какая сборка запущена на компьютере, а затем зарегистрировать соответствующую DLL.

Любая помощь будет принята с благодарностью!

ИЗМЕНИТЬ

На самом деле dll не вызывается из приложения - на самом деле это расширение оболочки, используемое для вызова приложения, поэтому я не могу просто добавить в свое основное приложение код, который вызывает определенные файлы DLL, и они должны быть зарегистрированы во время установки.

Я также очень хотел бы попробовать сделать это изначально в Visual Studio, если это вообще возможно.


person amartin94    schedule 04.06.2018    source источник
comment
comment
В этом ответе, похоже, используется продукт Advanced Installer - нет возможности сделать это полностью в VS, а если нет, есть ли бесплатная версия / версия с открытым исходным кодом?   -  person amartin94    schedule 04.06.2018
comment
Думаю, вам стоит публиковать отдельные установщики для x32 и x64. Но если вам это действительно нужно, взгляните на Wix и настраиваемые действия. Есть (немного устаревший) пример на codeproject   -  person vasily.sib    schedule 04.06.2018
comment
Я считаю, что Inno Setup имеет открытый исходный код и очень прост в использовании. Я использовал его в прошлом для выполнения именно той задачи, которую вы пытаетесь выполнить здесь. Но это не поможет вам понять, что делать в csproj.   -  person Bent Tranberg    schedule 04.06.2018
comment
Значит, нет возможности сделать это через проект установщика Visual Studio?   -  person amartin94    schedule 04.06.2018
comment
Пробовать устанавливать оба варианта не имеет смысла. У пользователя есть только один тип ОС, 32- или 64-разрядная, но не обе сразу. Фактически вы должны сообщить проекту, какой установщик вы создаете, задав свойством TargetPlatform. Довольно сомнительно, что вы даже должны пытаться поддерживать 32-битную ОС, эта разновидность быстро исчезла за последнее десятилетие, и если у вашего пользователя она есть, то она, вероятно, будет устаревшей и проблемной. Реализация расширения оболочки в .NET - это уже достаточно проблем, вам не нужно больше.   -  person Hans Passant    schedule 04.06.2018
comment
Расширение оболочки написано на C ++ из этой структуры: code.msdn.microsoft.com / windowsapps /. Нам необходимо поддерживать 32-битные приложения, потому что большая часть нашей пользовательской базы работает на старых системах и не является технически подкованной. Хотя я бы хотел избежать этого, на данном этапе было бы проще скомпилировать как 32-разрядную, так и 64-разрядную версию?   -  person amartin94    schedule 04.06.2018


Ответы (1)


Если архитектура вашего проекта установки 32-битная, то она не может включать 64-битную Dll. Если это 64-битный установочный проект, он может включать оба (очевидно, в разных местах). Это предполагает, что ваши Dll явно 32-битные для 32-битных клиентов и 64-битные для 64-битных клиентов, потому что настройки AnyCpu для кода могут сбивать с толку. Вот почему 32-битный клиентский код должен быть построен как x86, а 64-битный как x64. Вам нужны отдельные настройки архитектуры:

https://blogs.msdn.microsoft.com/heaths/2008/01/15/different-packages-are-required-for-different-processor-architectures/

Параметр регистрации в проекте установки находится в окне «Свойства» (выберите файл, затем F4) для файла в представлении файловой системы. См. Настройку Регистра. Если это расширение оболочки C ++, должна быть настройка vs Self register.

person PhilDW    schedule 04.06.2018