2011-07-14 18 views
0

インストーラーはWindowsサービスをインストールします。 私がサービスを開始するアカウントのいずれかを選択するようにフォームをユーザーに提供します。インストーラーはユーザーの下でサービスを開始できません

  1. ローカルサービス
  2. ローカルシステムを
  3. ネットワークシステム
  4. ユーザーアカウント

私は、ユーザーを選択し、インストール中にDomain \ Administrator account + pwdと入力すると、サービスを開始できません。

ローカルサービスを選択すると、正常に開始されました。この後、私は手動で同じドメイン\管理者アカウントに変更することができ、それはokを開始しました。 なぜこのような動作が異なるのですか? どのユーザーのアカウントでもインストール中にサービスを開始できますか?

答えて

2

Util Extensions User要素をご覧ください。 CreateUser属性をnoに、Name属性をUserName入力のUIで使用する[PROPERTY]に、LogonAsService属性をyesに設定できます。これにより、WiXは、ntrights.exeを呼び出すためのカスタムアクションを記述することなく、LogOnAsService権限をユーザに付与するよう指示します。要求されるようにここで

はサンプルです:

<?xml version="1.0" encoding="utf-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> 
    <Product Id="*" Name="Setup" Language="1033" Version="1.0.0.0" Manufacturer="test" UpgradeCode="5c6b0f52-d024-4f1b-bfae-2dbb96b3ef15"> 
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> 
    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> 
    <MediaTemplate EmbedCab="yes" /> 
    <UIRef Id="WixUI_Minimal" /> 
    <Feature Id="ProductFeature" Title="Setup" Level="1"> 
     <ComponentRef Id="serviceComponent" /> 
    </Feature> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="ProgramFilesFolder"> 
     <Directory Id="INSTALLFOLDER" Name="Setup"> 
      <Component Id="serviceComponent" Guid="380bbddd-daa7-0744-517b-37da768f5570"> 
      <File Id="serviceFile" Source="$(var.WindowsService.TargetPath)" KeyPath="yes" /> 
      <ServiceInstall Id="serviceInstall" Name="WindowsService" DisplayName="WindowsService" Start="auto" Type="ownProcess" ErrorControl="ignore" Account=".\serviceaccount" Password="p2Ekutrekac34ph2" /> 
      <ServiceControl Id="serviceControl" Name="WindowsService" Start="install" Stop="both" Remove="both" Wait="no" /> 
       <util:User Id="user" CreateUser ="yes" Name ="serviceaccount" Password="p2Ekutrekac34ph2" LogonAsService="yes" UpdateIfExists="yes" RemoveOnUninstall="yes" PasswordNeverExpires="yes" FailIfExists="no" Domain="[ComputerName]" CanNotChangePassword="yes" Disabled="no" PasswordExpired="no"/> 
      </Component> 
     </Directory> 
     </Directory> 
    </Directory> 
    </Product> 
</Wix> 
+0

これは実際には機能しますか?設定権限はカスタムアクションとしてスケジュールされているようだから、Wixがサービスをインストールしようとしたあとに起こるので、サービスをインストールするのと同時にこれを動作させることはできませんでした。または私はsomtehingが不足していますか? –

+0

私はこれをきれいなVMスナップショットでテストしましたが、問題はありませんでした。 –

+0

ユーザーアカウントに特権を設定し、同じ.msi/Wixインストールでサービスをインストールすることができます。どうか、コードを私と共有できますか?私はそこにその似たような質問をしました:http:// stackoverflow。com/questions/12949478/is-using-utiluser-logonasservice-and-service-install-with-same-wix-component –

1

選択したユーザーアカウントの権利がlog on as a serviceであることを確認する必要があります。管理者であれば、ユーザーにサービスをインストールすることはできません。ユーザーにログオンする必要はありません。

このポリシーを設定すると、インストール中に動的に行う必要があります。解決方法は、カスタムアクションとしてntrights.exeを使用することです。このカスタムアクションは、ユーザーアカウント情報を含むカスタムプロパティを使用できます。

1

@Christopher画家からのコードの彼の答えは動作しませんでした、なぜ誰もが疑問に思う場合。私はエラー1923で動作しなかった同様のコードを持っていました。

エラー1923.サービス ''()をインストールできませんでした。システム・サービスをインストールするための十分な特権があることを確認してください。MSI(10:08)[15:55:00:161]:製品: ''(64ビット) - エラー1923.サービス ''()をインストールできませんでした。システム・サービスをインストールするための十分な特権があることを確認してください。

インストール中にservices.mscダイアログを閉じる必要があるまで、

理由はありませんが、動作します。 開発中のservices.mscは常に開いていたので、私は気付きませんでした。

+0

興味深い。おそらく、サービススナップインがサービスコントロールマネージャのapiをロックしている可能性があります。私はこれについて聞いたことがない。私はある日テストするのに良いトリビア。どのバージョンとウィンドウのエディションを使用していましたか? –

+0

Windows 10 x64 Pro Anniv.Updateの使用。 Bingのビットを検索すると、過去に他の人が同じ問題を抱えていることがわかります。例えばhttps://conetrix.com/Blog/close-servicesmsc-window-to-add-or-remove-servicesを参照してください。 – juFo

関連する問題