在网络路径上设置权限时Wix MSI失败(util:PermissionEx)

在网络路径上设置权限时Wix MSI失败(util:PermissionEx),wix,windows-installer,wix3.8,Wix,Windows Installer,Wix3.8,我有一个微星,完美地工作时,安装在本地。如果数据路径设置为网络位置,则会失败 相关日志: 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=

我有一个微星,完美地工作时,安装在本地。如果数据路径设置为网络位置,则会失败

相关日志:

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
,它可以在网络共享上工作,但至少在目标目录为本地目录时,设置这些权限是一项要求

Q:是否可以使用wix/msi设置网络位置的权限?
如果不是,如何检测它是网络目录?
或者,在MSI中,是否有任何方法将组件标记为允许失败


如果无法执行上述任何操作,我可能需要编写一个自定义操作,尝试设置权限,但抑制任何失败…

简而言之,我认为这是不可能的。问题是提升的自定义操作使用系统帐户运行,并且该帐户没有任何网络权限。WiX-utils代码已经是一个自定义操作,它是作为一个普通任务的助手提供的,所以编写自己的自定义操作不会有帮助。如果运行CA not impersonated,它将不会运行提升版(除非在启动时提升整个MSI安装),因此这也不会有帮助。您需要一个提升的用户应用程序来实现网络共享,可能在首次使用应用程序时运行。这可能有助于:


如果它以\开头,我会假设它是一个网络共享。驱动器号无论如何都不能与CA一起使用,因为驱动器号是用户配置文件映射(不是系统映射),所以系统帐户不知道它们。在.Net中,FileSystem.GetDriveInfo会有所帮助

简而言之,我认为这是不可能的。问题是提升的自定义操作使用系统帐户运行,并且该帐户没有任何网络权限。WiX-utils代码已经是一个自定义操作,它是作为一个普通任务的助手提供的,所以编写自己的自定义操作不会有帮助。如果运行CA not impersonated,它将不会运行提升版(除非在启动时提升整个MSI安装),因此这也不会有帮助。您需要一个提升的用户应用程序来实现网络共享,可能在首次使用应用程序时运行。这可能有助于:


如果它以\开头,我会假设它是一个网络共享。驱动器号无论如何都不能与CA一起使用,因为驱动器号是用户配置文件映射(不是系统映射),所以系统帐户不知道它们。在.Net中,FileSystem.GetDriveInfo会有所帮助

简而言之,我认为这是不可能的。问题是提升的自定义操作使用系统帐户运行,并且该帐户没有任何网络权限。WiX-utils代码已经是一个自定义操作,它是作为一个普通任务的助手提供的,所以编写自己的自定义操作不会有帮助。如果运行CA not impersonated,它将不会运行提升版(除非在启动时提升整个MSI安装),因此这也不会有帮助。您需要一个提升的用户应用程序来实现网络共享,可能在首次使用应用程序时运行。这可能有助于:


如果它以\开头,我会假设它是一个网络共享。驱动器号无论如何都不能与CA一起使用,因为驱动器号是用户配置文件映射(不是系统映射),所以系统帐户不知道它们。在.Net中,FileSystem.GetDriveInfo会有所帮助

简而言之,我认为这是不可能的。问题是提升的自定义操作使用系统帐户运行,并且该帐户没有任何网络权限。WiX-utils代码已经是一个自定义操作,它是作为一个普通任务的助手提供的,所以编写自己的自定义操作不会有帮助。如果运行CA not impersonated,它将不会运行提升版(除非在启动时提升整个MSI安装),因此这也不会有帮助。您需要一个提升的用户应用程序来实现网络共享,可能在首次使用应用程序时运行。这可能有助于:


如果它以\开头,我会假设它是一个网络共享。驱动器号无论如何都不能与CA一起使用,因为驱动器号是用户配置文件映射(不是系统映射),所以系统帐户不知道它们。在.Net中,FileSystem.GetDriveInfo会有所帮助

谢谢。我使用Burn作为引导程序,在启动时提升MSI,因此非模拟CA应该运行提升。我会试试,然后寄回来。谢谢。我使用Burn作为引导程序,在启动时提升MSI,因此非模拟CA应该运行提升。我会试试,然后寄回来。谢谢。我使用Burn作为引导程序,在启动时提升MSI,因此非模拟CA应该运行提升。我会试试,然后寄回来。谢谢。我使用Burn作为引导程序,在启动时提升MSI,因此非模拟CA应该运行提升。我会试试,然后发回。