C#自定义操作DLL - 访问被拒绝

时间:2017-07-21 20:48:39

标签: c# windows windows-installer custom-action advanced-installer

这似乎是一个环境问题,因为它目前正在影响一个用户(据我们所知)。

我们使用C#自定义动作dll,它依赖于我们MSI中的实用程序dll。使用这些文件调用第一个自定义操作时,用户将获得:

SFXCA: Extracting custom action to temporary directory:
C:\Windows\Installer\MSIBAA4.tmp-\ SFXCA: Binding to CLR version
v4.0.30319 Calling custom action
CustomActions!CustomActions.CustomActions.InitializeInstallationValues
Exception thrown by custom action:
System.Reflection.TargetInvocationException: Exception has been thrown
by the target of an invocation. ---> System.IO.FileLoadException:
Could not load file or assembly 'InstallerUtils, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=null' or one of its dependencies.  Access is denied.
    at CustomActions.CustomActions.InitializeInstallationValues(Session session)          
    --- End of inner exception stack trace ---
    at System.RuntimeMethodHandle.InvokeMethod(Object target, Object arguments, Signature sig, Boolean constructor)
    at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object parameters, Object arguments)
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture)   
    at Microsoft.Deployment.WindowsInstaller.CustomActionProxy.InvokeCustomAction(Int32sessionHandle, String entryPoint, IntPtr remotingDelegatePtr)
CustomAction InitializeProperties returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)

由于MSI可以写入文件但不能从中读取,因此在我看来可能会有某种形式的安全软件/策略;是否有Windows API可以让我确定原因:

  

访问被拒绝

1 个答案:

答案 0 :(得分:1)

询问客户安装了哪些防病毒/恶意软件产品并让他们禁用它们。重新测试以确认这是否是问题。

如果这不起作用谷歌搜索“无法加载文件或程序集访问被拒绝”并忽略任何谈论ASP.NET的线程。 DTF不会编译到临时Internet文件目录,因此不相关。该机器上的某些东西会干扰您加载所需组件的过程。

如果它是一些奇怪的防病毒软件,您可以尝试重建DLL并查看签名是否不再使扫描程序触发误报警。您也可以尝试对其进行代码签名。

我曾经在90年代开展过一个项目,在那个项目中,使用他们自己的IBM防病毒软件的IBM合作伙伴在为一个版本运行我们的安装程序时遇到了问题,而下一个构建版本已经消失了。他们对我们疯狂(我们是EDS所以他们自然而然地讨厌我们)说我们被污染但我们没有。