gpt4 book ai didi

.net - SSIS 脚本任务 COMException/FileNotFoundException 错误

转载 作者:行者123 更新时间:2023-12-02 05:26:51 25 4
gpt4 key购买 nike

您好,如果我将其放入 .vbs 文件并运行,我有以下 VBS 可以毫无问题地运行。

Dim objshell
Set objshell = CreateObject("Shell.Application")
objshell.NameSpace("C:\Temp").CopyHere(objshell.NameSpace("C:\Temp\Test.zip").Items())
Set objshell = Nothing

但是如果我将它剪切并粘贴到 SSBI 2008 中的脚本任务中,它会运行并出现错误

Error: 0x1 at Script Task: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Runtime.InteropServices.COMException (0x80020003): Member not found. (Exception from HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND))
at Microsoft.VisualBasic.CompilerServices.LateBinding.InternalLateSet(Object o, Type& objType, String name, Object[] args, String[] paramnames, Boolean OptimisticSet, CallType UseCallType)
at Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateSet(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean OptimisticSet, Boolean RValueBase, CallType CallType)
at Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateSetComplex(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean OptimisticSet, Boolean RValueBase)
at ST_a4312d30d99b4cc4b02a2198afbc77d9.vbproj.ScriptMain.Main()
--- End of inner exception stack trace ---
at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
at Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()
Task failed: Script Task

我认为必须在 SSBI 中设置一些配置,而不是默认运行才能使其正常工作。我是否必须改用 C# 并不重要。但不要让我使用和安装任何第 3 方的东西。系统正在运行安装了 .NET 4.5 的 Windows 7。

求助!谢谢!

最佳答案

我弄清楚了配置,但有点复杂。

  1. 打开您的脚本任务,编辑脚本。当脚本编辑窗口打开时,将上面的脚本稍作修改放置到 Sub Main 中:

    Dim objshell

    成为

    Dim objshell As Shell

  2. 转到 Project->st_xxxxx Properties,Signing,勾选 sign the assembly,选择 New,键入任何文件名,取消勾选 Protect my file有密码。

  3. 转到“引用”、“添加”、“COM”,选择“Microsoft Shell 控件和自动化”,确定。

    ** 您应该会看到一个弹出窗口,提示未找到模板信息...,请忽略它。 **

  4. 突出显示您刚添加的 Microsoft Shell 控件并查看右下角的属性部分,确保“强名称”为 True。

    (如果您还没有完成第 2 步,这应该是 False,重做第 2 步并确保这是 True)

  5. 打开我的电脑,进入生成的Microsoft Shell Controls dll的路径(看高亮路径,一般是C:\Users\xxxxxxx\AppData\Local\Temp\SSIS\yyyyyyyyyyyyyyyyy\obj\Debug\Interop.Shell32.dll)。将其复制到其他地方(因为原始路径 yyyyyyyyyyyyyy 是每次您编辑脚本时随机生成的,导致签名的 dll 每次都消失)。

  6. 返回项目->st_xxxxx 属性,删除突出显示的 Microsoft Shell 控件。点击添加,浏览,选择刚才复制的Interop.Shell32.dll,确定。再次确保 Strong Name 属性为 True。如果不是,请从第 2 步开始重做。

  7. 仍然在 References 的 Imported namespaces 下,向下滚动以选中 Shell32 旁边的框。

  8. 转到“签名”,取消选中“为程序集签名”。转到右上角的项目资源管理器,删除您在第 2 步中创建的 key 文件 (xxxx.snk)(删除项目资源管理器中的 key 文件,而不是从您的文件夹中删除,确保它不再包含在您的项目资源管理器或您的脚本中任务不会运行)。

  9. 全部保存并关闭脚本编辑窗口。

  10. 在您的计算机中找到“gacutil.exe”。你应该把它和 SSIS 安装在一起。它在 C:\Program Files 下(x86)\Microsoft SDKs\Windows\v7.0A\bin\x64。输入 gacutil -i "路径您在步骤 5 中复制的 Interop.Shell32.dll”。

    e.g. gacutil -i F:\Code\Interop.Shell32.dll

完成所有这些步骤后,您的脚本任务应该可以正常运行。当然,如果您使用其他 COM 引用,则需要执行这些步骤。让我知道是否有一些更简单的方法来完成这项工作。希望这会有所帮助。

关于.net - SSIS 脚本任务 COMException/FileNotFoundException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12965210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com