2014-09-09 3 views
0

У нас есть Snapin PowerShell, для которого требуется версия 3.0 PowerShell. Таким образом, мы использовали следующий элемент файла в файле WiX (3,8):Ошибка в Wix? Является ли ps: SnapIn записывает неправильный раздел реестра с PowerShell 3.0?

 <File Id="MySnapin.dll" 
       Name="MySnapin.dll" 
       Assembly=".net" 
       KeyPath="yes" 
       Vital="no" 
       Checksum="yes" 
       DiskId="1" 
       Source="$(var.FilesPath)\Bin\MySnapin.dll" 
       AssemblyApplication="MySnapin.dll"> 
      <ps:SnapIn Id="MySnapin" 
         Description="This is a PowerShell snap-in" 
         Vendor="My Company Inc." 
         RequiredPowerShellVersion="3.0"> 
       <ps:FormatsFile FileId="MySnapin.format.ps1xml" /> 
      </ps:SnapIn> 
     </File> 

Однако при установке этого оснастку не может быть найден в PowerShell (Get-PSSnapIn -registered). При рассмотрении реестра выясняется, что snapin зарегистрирован в HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\PowerShell\3\PowerShellSnapIns\MySnapin. Но при запуске installutil.exe в DLL регистрация заканчивается на HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\PowerShell\1\PowerShellSnapIns\MySnapin, и powershell находит ее правильно. Это ошибка в WiX Toolset, или я делаю что-то неправильно здесь?

Где действительно должны регистрироваться регистрации?

+1

Похоже, что это может быть ошибка, но есть ли причина, по которой вы используете оснастку над модулем? Snap-ins обычно используются только сейчас, когда вам нужно поддерживать более старые версии PowerShell. –

+0

Причина использования SnapIn очень проста; Я не знал о возможности использовать модули для командлетов до недавнего времени. Переключение на модуль вместо этого кажется хорошим обходным решением для этой проблемы. – DeCaf

ответ

2

Да, это звучит как ошибка, поэтому вы можете сообщить об этом разработчикам WiX, но есть лучший способ.

Рекомендуемый способ добавления командлетов и функций осуществляется через модули PowerShell. Snap-ins - это более старый способ расширения PowerShell, но при этом все еще поддерживается. Если вам не нужно поддерживать добавление командлетов в более старые версии PowerShell, используйте модуль.

Модули несколько проще в развертывании, чем оснастки. В основном вы можете разместить их в любом месте, однако, если вы хотите, чтобы пользователи могли загружать их по имени, они должны существовать в переменной среды PSModulePath. Ваш установщик добавит ваши файлы и обновит переменную PSModulePath, чтобы включить папку Modules из вашей установочной папки. Тогда пользователи просто смогут позвонить Import-Module MyModule, чтобы загрузить их. Также см. documentation на PSModulePath.

This В блоге содержится подробное описание того, как написать установщик WiX для этого. Он также содержит инструкции по проверке того, установлена ​​ли установленная версия PowerShell. В принципе, вы будете проверять под этими двумя ключами реестра, которые вы указали для значения PowerShellEngine \ PowerShellVersion.

+0

Спасибо за информацию. Действительно, модули намного удобнее, чем SnapIns, поэтому мы будем конвертировать наше решение, чтобы использовать их. Однако представит отчет об ошибке команде WiX. – DeCaf