WIX: восстановление службы Windows завершается неудачно из-за отсутствия прав + как определить режим восстановления? - PullRequest
1 голос
/ 08 июля 2011

Наша установка WIX устанавливает службу Windows после запроса учетной записи входа в систему через пользовательский интерфейс. Служба запускается после успешной установки. Вся установка требует повышенных привилегий.

Надеемся на любые указатели относительно пары вопросов:

Вопрос 1 При попытке «Восстановить» из «Установка и удаление программ» UAC запрашивает повышение привилегий. После разрешения ремонта все равно происходит сбой с сообщением:

«Служба не может быть установлена. Убедитесь, что у вас достаточно прав для установки системных служб».

Вот выдержка из кода:

...

Привилегированный ...

  <Component Id="C_ServiceEXE" Guid="{105F9C86-BF07-43C8-8C78-DF30F012CD68}">
    <File Id="$(var.TargetFileName)" Name="$(var.TargetFileName)" KeyPath="yes"  Assembly=".net"
          AssemblyManifest="$(var.TargetFileName)" AssemblyApplication="$(var.TargetFileName)" DiskId="1"
          Source="$(var.TargetDir)\$(var.TargetFileName)" />

    <Condition>Privileged</Condition>

    <ServiceInstall Id="Id_ServiceInstall"
                     Name ="$(var.ServiceName)"
                     Description="$(var.ServiceDescription)"
                     DisplayName="$(var.ServiceName)"
                     Account="[SERVICEACCOUNT]"
                     Password="[SERVICEPASSWORD]"
                     Start="auto"
                     ErrorControl="normal"
                     Type="ownProcess"
                     Vital="yes"
                     Interactive="no"
                     />

    <ServiceControl Id="Id_ServiceControl"
                    Name ="$(var.ServiceName)"
                     Remove="uninstall"
                     Start="install"
                     Stop="both"
                     Wait="yes"
                    />

  </Component>

...

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

Я подозреваю, что мне может не хватать планирования восстановления в последовательности AdminInstallExecute, но я не совсем уверен, исправит ли это это.

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

Но как определяется ремонт?

Ценю любую помощь или указатели.

1 Ответ

0 голосов
/ 11 июля 2011

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

Если настройка этой политики работает, вам также необходимо выполнить ее динамически во время установки.Решением является использование ntrights.exe в качестве настраиваемого действия.Это пользовательское действие может использовать ваши пользовательские свойства, которые содержат информацию об учетной записи пользователя.

Чтобы обнаружить процесс восстановления, вы можете проверить значение свойства REINSTALL .

...