2013-03-26 4 views
1

<util:User Id="UpdateServiceAccountLogonAsService" UpdateIfExists="yes" CreateUser="no" Name="[SERVICEACCOUNTFULL]" LogonAsService="yes"/>을 사용하여 UI 지정 사용자에게 logonAsService를 부여하려고합니다. 이 유틸리티 이전에이 속성 값 은 (는)으로 업데이트되었습니다. 런타임에 처리되는 사용자. 나는 SERVICEACCOUNTFULL 속성을 "로컬 호스트 \ defaultUserValue"의 기본 값을주고 createuser가이 = "예"하고 그 내 사용자 지정 작업 후 원래 값 을 보여주는에 대한 런타임 메시지 박스의 오류가 발생합니다 설정할 수 있기 때문에<util:User /> 업데이트 된 값을 사용하지 않는 속성 참조

나는 이것을 알고 속성 값을 설정했습니다. 왜 그것이 사용자 생성에 실패했는지는 모르지만 올바른 타이밍을 보여줍니다. 속성 기본값을 하드 코드로 설정하면 동적으로 (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 작업 오류를 CreateUser = "예"로 만들 때 구성 사용자 지정 작업이 반환 된 후 분명히 여러 박자가 발생하는 것을 제외하고는 문제를 설명하는이 역 순서로 기록됩니다. 하지만 아마 이상한 방법으로 대기하고 있고 실행의 순서가 문제 일 수도 있습니다. 그 경우에는 여전히 그 순서를 제어하는 ​​방법을 모릅니다.

당신이 진단하기에 좋은 정보입니까?

+1

작동하지 않는 경우 'SERVICEACCOUNTFULL'을 어떻게 설정하는지에 대한 정보를 추가 할 수 있습니까? 아마도 매우 유익 할 것입니다. –

+0

고마워! 나는 세부 사항을 가진 질문을 편집했다. –

답변

1

User 요소에서 사용할 속성을 설정하는 사용자 지정 동작 RunConfiguration이 너무 늦게 실행되고 있습니다. 대신 RunConfigurationInstallFiles 전에 예약하는 대신 ConfigureUsers 전에 조치를 예약하십시오. 예 :

<Custom Action="RunConfiguration" Before="ConfigureUsers"> 
<![CDATA[&FeatureServer > 2 AND Not Installed ]]> 
</Custom> 
+0

신난다, 고마워! 그리고 처음부터 툴셋에 대해 감사드립니다! –