Установщик Wix: установленная служба не может прочитать записи реестра HKLM при запуске - PullRequest
0 голосов
/ 15 мая 2018

Я использую инструмент wix 3.11 для создания MSI, который устанавливает службу.Установщик запускает Custom Action и возвращает vars в wix для записи в реестр (HKLM).Служба запускается и пытается прочитать реестр, но это не может быть сделано, и это не удается.Если я написал реестр вручную, установщик работает отлично.

Сообщение об ошибке из журналов MSI:

Product: Installer-- Error 1920. Service 'XPTO Server' (xpto_server) failed to start.  Verify that you have sufficient privileges to start system services.

Мой Wix XML:

<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" InstallPrivileges="elevated" />
...
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
  <Component Id="CMP_RegistryEntries" Guid="xxxxxxxxx" >
    <RegistryKey Root="HKLM" Key="SOFTWARE\XPTOInc\XPTO\XPTOServer\BetaVersion">
      <RegistryValue Name="token" Action="write" Value="[TOKEN]" Type="string" KeyPath="yes" />
      <RegistryValue Name="[IDENTIFIER_TYPE]" Action="write" Value="[INSTALLEDID]" Type="string" />
      <RegistryValue Name="installDir" Action="write" Value="[INSTALLFOLDER]" Type="string" />
    </RegistryKey>
  </Component>
  <Component Id="CMP_XPTOServerEXE" Guid="xxxxxx">
    <File Id="FILE_XPTOServerEXE" Name="xpto-server.exe" Source="Work\xpto-server.exe" KeyPath="yes" />
    <ServiceInstall Id="InstallExporterService" Name="xpto_server" DisplayName="XPTO Server" Description="Read data from Registry and do simple stuff" ErrorControl="normal" Start="auto" Type="ownProcess" />
    <ServiceControl Id="ServiceStateControl" Name="xpto_server" Remove="uninstall" Start="install" Stop="both" />
  </Component>
</ComponentGroup>

РЕДАКТИРОВАТЬ: Когда я вручнуюзаписал переменные в реестр, служба устанавливается с помощью MSI pkg или работает с sc.exe

РЕДАКТИРОВАТЬ 2: Здесь следует журнал, где устанавливает реестр, а затем звезда службы

MSI (s) (70:74) [15:40:37:560]: Created Custom Action Server with PID 16808 (0x41A8).
MSI (s) (70:E4) [15:40:37:613]: Running as a service.
MSI (s) (70:E4) [15:40:37:615]: Hello, I'm your 32bit Elevated Non-remapped custom action server.
MSI (s) (70:38) [15:40:37:973]: Executing op: ActionStart(Name=WriteRegistryValues,Description=Writing system registry values,Template=Key: [1], Name: [2], Value: [3])
Action 15:40:37: WriteRegistryValues. Writing system registry values
MSI (s) (70:38) [15:40:37:974]: Executing op: ProgressTotal(Total=3,Type=1,ByteEquivalent=13200)
MSI (s) (70:38) [15:40:37:975]: Executing op: RegOpenKey(Root=-2147483646,Key=SOFTWARE\XPTOInc\XPTO\XPTOServer\BetaVersion,,BinaryType=0,,)
MSI (s) (70:38) [15:40:37:975]: Executing op: RegAddValue(Name=token,Value=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,)
WriteRegistryValues: Key: \SOFTWARE\XPTOInc\XPTO\XPTOServer\BetaVersion, Name: token, Value: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
MSI (s) (70:38) [15:40:37:976]: Executing op: RegAddValue(Name=envId,Value=xxxxxxxxxxxxxxxxxxxxxxxx,)
WriteRegistryValues: Key: \SOFTWARE\XPTOInc\XPTO\XPTOServer\BetaVersion, Name: envId, Value: xxxxxxxxxxxxxxxxxxxxxxxxx
MSI (s) (70:38) [15:40:37:976]: Executing op: RegAddValue(Name=installDir,Value=C:\Program Files (x86)\XPTOInc\XPTO\XPTO Server Beta\,)
WriteRegistryValues: Key: \SOFTWARE\XPTOInc\XPTO\XPTOServer\BetaVersion, Name: installDir, Value: C:\Program Files (x86)\XPTOInc\XPTO\XPTO Server Beta\
MSI (s) (70:38) [15:40:37:977]: Executing op: ActionStart(Name=InstallServices,Description=Installing new services,Template=Service: [2])
Action 15:40:37: InstallServices. Installing new services
MSI (s) (70:38) [15:40:37:977]: Executing op: ProgressTotal(Total=1,Type=1,ByteEquivalent=1300000)
MSI (s) (70:38) [15:40:37:978]: Executing op: ServiceInstall(Name=xpto_server,DisplayName=XPTOServer,ImagePath="C:\Program Files (x86)\XPTOInc\XPTO\XPTO Server Beta\xpto-server.exe",ServiceType=16,StartType=2,ErrorControl=1,,Dependencies=[~],,,Password=**********,Description=Read data from Registry and do simple stuff,,)
InstallServices: Service: 
MSI (s) (70:38) [15:40:37:980]: Executing op: ActionStart(Name=StartServices,Description=Starting services,Template=Service: [1])
Action 15:40:37: StartServices. Starting services
MSI (s) (70:38) [15:40:37:981]: Executing op: ProgressTotal(Total=1,Type=1,ByteEquivalent=1300000)
MSI (s) (70:38) [15:40:37:981]: Executing op: ServiceControl(,Name=xpto_server,Action=1,,)
StartServices: Service: XPTO Server
Error 1920. Service 'XPTO Server' (xpto_server) failed to start.  Verify that you have sufficient privileges to start system services.

1 Ответ

0 голосов
/ 15 мая 2018

Решение : проблема в этом случае заключалась в том, что ключи реестра не были найдены в ожидаемом месте в реестре из-за проблем с 32-разрядными / 64-разрядными.

  • 64-битная секция : HKEY_LOCAL_MACHINE\SOFTWARE\Company\App - MyValue
  • 32-разрядная секция : HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Company\App - MyValue

Конец ответа . Оставляя усилия по отладке на месте ниже, хотя:


Раунд 1 :

Может быть, попытаться прочитать эти два последних ответа и проверить, не звонит ли что-нибудь в колокол:

Что говорится в окне просмотра событий ? ( Windows + R eventvwr и OK)


Раунд 2 :

  • Битность : Вы уверены, что читаете из правильного места в реестре ? Вы устанавливаете 32-битный MSI или 64-битный MSI? (выглядит как 32-битный)
    • 64-битная секция : HKEY_LOCAL_MACHINE\SOFTWARE\Company\App
    • 32-разрядная секция : HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Company\App
  • Разрешения : Вы проверяли разрешения для ключей реестра и значений, которые ваша установка записывает, используя regedit.exe для проверки? Right click => Permissions (должен спросить).
  • Привилегии : Какую учетную запись вы используете для запуска службы? Это выглядит как стандартная LocalSystem? Учетной записи требуется привилегия SeServiceLogonRight . Подробнее см. Вторую строку в разделе выше.
  • Ведение журнала : Используете ли вы log4net или какую-либо другую функцию ведения журнала в вашем сервисе? Вы пробовали подробный отладочный журнал MSI , найденный в первой ссылке в верхнем разделе?
...