1

<util:User Id="UpdateServiceAccountLogonAsService" UpdateIfExists="yes" CreateUser="no" Name="[SERVICEACCOUNTFULL]" LogonAsService="yes"/>UIで指定されたユーザーにlogonAsServiceを付与するために使用しようとしています。このプロパティ値は、このutil:Userが実行時に処理される前に 更新されます。

SERVICEACCOUNTFULLプロパティにデフォルト値"localhost\ defaultUserValue"を指定し、CreateUser = "yes"を設定すると、カスタムアクションでプロパティ値が設定された後、元の値が表示されるというランタイムメッセージボックスエラーが生成されるため、これを知っています。それがユーザーの作成に失敗する理由はわかりませんが、正しいタイミングを示しています。プロパティのデフォルト値を動的に(を使用してCreateUser="no")設定する値にハードコーディングすると、機能します。

<ServiceInstall />同じコンポーネントの一部として持っているタグは、プロパティの更新された値を正しく使用しますが、使用しませ<util:User />ん。

プロパティ値を設定するカスタムアクションプログラムの後にcreateUserステップが発生することを確認していることを思い出してください。しかし、奇妙なことに、createUserアクションの実行は、プロパティ値を取得するカスタムアクションのすぐ上のログにありますBefore="InstallFiles"

ヘルプ?ありがとう!

===========

こんにちはロブ、

何を見る必要があるか正確にはわかりませんが、これらは関連していると思います。

<Component Id="Service" Guid='*'>
  <File Source='$(var.root)My Service.exe' />
  <ServiceInstall Id="ServiceInstall"
    Name="MyServer"
    DisplayName="My Server"
    Type="ownProcess"
    Start="auto"
    ErrorControl="normal"
    Description="My Server Windows Service"
    Interactive="no"
    Account="[SERVICEACCOUNTFULL]"
    Password="[SERVICEACCOUNTPASSWORD]" />
  <ServiceControl Id="StopMyServer" Name="MyServer" Stop="both" Wait="yes" Remove="uninstall" />
  <util:User Id="UpdateServiceAccountLogonAsService" UpdateIfExists="yes" 
    CreateUser="no" Name="[SERVICEACCOUNTFULL]" LogonAsService="yes"/>
</Component>

...

<Binary Id="ConfigBinary" SourceFile="$(var.....TargetDir)$(var.Configuration.TargetName).CA.exe" />

<Property Id="Net">net.exe</Property>
<CustomAction Id="NetStart" Property="Net" ExeCommand="START MyServer" Return="check" />

<Property Id="PerformNetStart" Value="0" />
<CustomAction Id='SetPerformNetStart' Property='PerformNetStart' Value='1' />
<CustomAction Id="RunConfiguration" BinaryKey="ConfigBinary" DllEntry="RunConfiguration" Execute="immediate" Return="check" />
<CustomAction Id='IsPrivileged' Error='You must be an admin to install this feature' />

<InstallExecuteSequence>
    <Custom Action='IsPrivileged' Before='RunConfiguration'>
    <![CDATA[Not Privileged AND &FeatureServer > 2 ]]>
    </Custom>
    <Custom Action="RunConfiguration" Before="InstallFiles">
    <![CDATA[&FeatureServer > 2 AND Not Installed ]]>
    </Custom>
    <Custom Action="SetPerformNetStart" Before="InstallFiles">
    <![CDATA[&FeatureServer > 2 AND Not Installed ]]>
    </Custom>
    <Custom Action="NetStart" After="InstallFinalize">
    PerformNetStart = 1
    </Custom>
</InstallExecuteSequence>

次にC#で:

public static ActionResult RunConfiguration(Session session)
{
    session["SERVICEACCOUNTFULL"] = "MyDomain\svcAccount";
    session["SERVICEACCOUNTPASSWORD"] = "secret;

    return ActionResult.Success;
}

ハードコードされた有効な値の実行のログは次のとおりです。

MSI (s) (F0:F8) [18:29:29:191]: Created Custom Action Server with PID 4796 (0x12BC).
MSI (s) (F0:CC) [18:29:29:211]: Running as a service.
MSI (s) (F0:CC) [18:29:29:213]: Hello, I'm your 32bit Impersonated custom action server.
MSI (s) (F0!48) [18:29:29:240]: PROPERTY CHANGE: Adding CreateUserRollback property. Its value is '**********'.
MSI (s) (F0!48) [18:29:29:243]: Doing action: CreateUserRollback
Action 18:29:29: CreateUserRollback. 
Action start 18:29:29: CreateUserRollback.
CreateUserRollback: 
Action ended 18:29:29: CreateUserRollback. Return value 1.
MSI (s) (F0!48) [18:29:29:247]: PROPERTY CHANGE: Adding CreateUser property. Its value is '**********'.
MSI (s) (F0!48) [18:29:29:247]: Doing action: CreateUser
Action 18:29:29: CreateUser. 
Action start 18:29:29: CreateUser.
CreateUser: 
Action ended 18:29:29: CreateUser. Return value 1.
Action ended 18:29:29: ConfigureUsers. Return value 1.
MSI (s) (F0:F0) [18:29:29:252]: Skipping action: IsPrivileged (condition is false)
MSI (s) (F0:F0) [18:29:29:252]: Doing action: RunConfiguration
Action 18:29:29: RunConfiguration. 
Action start 18:29:29: RunConfiguration.
MSI (s) (F0:E0) [18:29:29:286]: Invoking remote custom action. DLL: C:\Windows\Installer\MSIC008.tmp, Entrypoint: RunConfiguration
SFXCA: Extracting custom action to temporary directory: C:\Users\Jason\AppData\Local\Temp\MSIC008.tmp-\
SFXCA: Binding to CLR version v4.0.30319
Calling custom action ...Configuration!...RunConfiguration
Begin RunConfiguration
Setting MSI values from RunConfiguration
MSI (s) (F0!48) [18:29:47:629]: PROPERTY CHANGE: Modifying RUNTIMECONNECTIONSTRING property. Its current value is 'DEFAULT'. Its new value: 'Data Source=.;Initial Catalog=DB;Integrated Security=True'.
MSI (s) (F0!48) [18:29:47:629]: PROPERTY CHANGE: Modifying SERVICEACCOUNTFULL property. Its current value is 'MyDomain\DEFAULTVALUE'. Its new value: 'MyDomain\svcAccount'.
...
Returning from RunConfiguration

この逆の順序でログに記録されます。これは、CreateUser = "yes"でCreateUserアクションエラーを発生させたときに、構成カスタムアクションが戻った後、明らかに数ビート発生することを除いて、問題を説明します。しかし、おそらくそれは奇妙な方法でキューに入れられており、実際には実行の順序が問題です-その場合、私はまだその順序を制御する方法を知りません。

これはあなたが診断するのに良い情報ですか?

4

1 に答える 1

1

RunConfiguration問題は、要素によって使用されるプロパティを設定するカスタムアクションのUser実行が遅すぎることです。RunConfigurationbeforeをスケジュールするInstallFiles代わりに、アクションをbeforeにスケジュールしConfigureUsersます。何かのようなもの:

<Custom Action="RunConfiguration" Before="ConfigureUsers">
<![CDATA[&FeatureServer > 2 AND Not Installed ]]>
</Custom>
于 2013-03-27T04:41:36.967 に答える