2015-02-18 4 views
0

У меня есть MSI, который отлично работает при установке локально. Если путь данных задан в сетевом расположении, он терпит неудачу.Wix MSI не работает при настройке разрешений на сетевой путь (использование: PermissionEx)

Соответствующие LOG:

MSI (s) (BC:4C) [17:01:57:322]: Executing op: ActionStart(Name=ExecSecureObjects_64,,) 
MSI (s) (BC:4C) [17:01:57:322]: Executing op: CustomActionSchedule(Action=ExecSecureObjects_64,ActionType=3073,Source=BinaryData,Target=ExecSecureObjects,CustomActionData=\\ravel\TeamData\lrieger\Tim2015Pre_Data\CreateFolderEveryone-1073741824C:\ProgramData\Nemetschek Engineering\TIM 2015.0.0.477590057-pre\CreateFolderEveryone-1073741824) 
MSI (s) (BC:78) [17:01:57:324]: Invoking remote custom action. DLL: C:\Windows\Installer\MSIAEDE.tmp, Entrypoint: ExecSecureObjects 
MSI (s) (BC:A8) [17:01:57:324]: Generating random cookie. 
MSI (s) (BC:A8) [17:01:57:325]: Created Custom Action Server with PID 4488 (0x1188). 
MSI (s) (BC:60) [17:01:57:335]: Running as a service. 
MSI (s) (BC:60) [17:01:57:337]: Hello, I'm your 64bit Elevated custom action server. 
ExecSecureObjects: Error 0x80070005: failed to get security info for object: \\ravel\TeamData\lrieger\Tim2015Pre_Data\ 
CustomAction ExecSecureObjects_64 returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox) 
MSI (s) (BC:4C) [17:01:57:393]: Note: 1: 2265 2: 3: -2147287035 
MSI (s) (BC:4C) [17:01:57:393]: User policy value 'DisableRollback' is 0 
MSI (s) (BC:4C) [17:01:57:393]: Machine policy value 'DisableRollback' is 0 
Action ended 17:01:57: InstallExecute. Return value 3. 

WIX Код:

 <Component Directory="DATA_DIRECTORY"> 
      <RegistryValue Root="HKLM" Key="$(var.RegRoot)\Setup" Name="TIM_DATA_DIRECTORY" Value="0xff" Type="string" /> 
      <CreateFolder> 
       <util:PermissionEx User="Everyone" GenericRead="yes" GenericWrite="yes" Domain="[LOGONDOMAIN]" /> 
      </CreateFolder> 
     </Component> 

Без util:PermissionEx он работает на сетевом ресурсе, но установка этих разрешений является требование, по крайней мере, если целевой каталог является локальным ,

Вопрос: Возможно ли установить разрешения в сети с помощью wix/msi?
Если нет, как я могу определить, что это сетевой каталог?
Или есть ли в MSI любой способ пометить компонент как разрешенный?

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

ответ

3

Короче говоря, я не думаю, что это возможное. Проблема заключается в том, что с помощью системной учетной записи выполняются повышенные пользовательские действия, и у этой учетной записи нет сетевых прав. Этот код WiX utils уже является настраиваемым действием, которое поставляется в качестве помощника для общей задачи, поэтому писать собственное пользовательское действие не поможет. Если вы запустите CA без выдачи себя, он не будет работать с повышенным уровнем (если вы не поднимете всю установку MSI во время запуска), так что это вряд ли поможет. Чтобы сделать это для общего сетевого ресурса, вам нужно приложение с повышенными правами, возможно, при первом использовании самого приложения. Это может помочь:

http://wixtoolset.org/documentation/manual/v3/howtos/ui_and_localization/run_program_after_install.html

Я бы предположил, что это сетевой ресурс, если он начинается с \. Буква диска не будет работать с ЦС, так как буквы дисков являются сопоставлением профиля пользователя (а не с отображением системы), поэтому системная учетная запись не будет знать о них. В .Net, FileSystem.GetDriveInfo поможет.

+0

Спасибо. Я использую Burn как Bootstrapper, который поднимает MSI при запуске, поэтому не-олицетворенный CA должен работать повышенным. Я попробую и отправлю обратно. –

+0

Использование (не вылитой) C# CA работает, спасибо еще раз. –