首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >set Shell = new (Shell.appliecaton)

set Shell = new (Shell.appliecaton)
EN

Stack Overflow用户
提问于 2016-03-09 04:00:44
回答 1查看 766关注 0票数 0

我一直在使用Shell解压缩文件。突然,它停止处理错误:

“类不支持自动化或不支持预期的接口”

如果我在Win7机器上构建它,它就在Win7机器上运行,而不是在Win10上运行。如果我在Win10机器上构建它,它就在Win10机器上运行,而不是在Win7机器上运行。当在Win7机器上构建时,早期版本在这两台机器上运行良好。

我仔细地比较了.aip构建文件(高级安装程序),它们是相同的。我已经有3到4个月没碰过相关代码了。

下面是我正在使用的代码(您可能认得出来):

{ Dim ShellClass为外壳32.ShellClass FileSource为ShellClass 32. Filedest Filedest为ShellClass 32.Filedest Folderitems为ShellClass 32 Folderitems

代码语言:javascript
复制
If sFileSource = "" Or sFileDest = "" Then
    GoTo Zip_Activity_Err
End If

Select Case UCase$(Action)
    Case "ZIPFILE"
        If Right$(UCase$(sFileDest), 4) <> ".ZIP" Then
            sFileDest = sFileDest & ".ZIP"
        End If
        If Not Create_Empty_Zip(sFileDest) Then
            GoTo Zip_Activity_Err
        End If
        Set ShellClass = New shell32.Shell
        Set Filedest = ShellClass.NameSpace(sFileDest)
        Call Filedest.CopyHere(sFileSource, 20)

    Case "ZIPFOLDER"
        If Right$(UCase$(sFileDest), 4) <> ".ZIP" Then
            sFileDest = sFileDest & ".ZIP"
        End If
        If Not Create_Empty_Zip(sFileDest) Then
            GoTo Zip_Activity_Err
        End If                                   
        Set ShellClass = New shell32.Shell
        Set FileSource = ShellClass.NameSpace(sFileSource)
        Set Filedest = ShellClass.NameSpace(sFileDest)
        Set Folderitems = FileSource.Items
        Call Filedest.CopyHere(Folderitems, 20)
    Case "UNZIP"
        If Right$(UCase$(sFileSource), 4) <> ".ZIP" Then
            sFileSource = sFileSource & ".ZIP"
        End If

        Set ShellClass = New shell32.Shell  <--- Here's where it fails

        Set FileSource = ShellClass.NameSpace(sFileSource)     
        Set Filedest = ShellClass.NameSpace(sFileDest)     
        Set Folderitems = FileSource.Items     
        Filedest.CopyHere Folderitems, _
            NoUserInterfaceIfErr + _
            NoConfirmOfNewDir + _
            YesToAll + NoProgBox               
     Case Else
End Sele

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-09 04:33:25

解决方案可能是使用后期绑定。

所以使用Set Obj = CreateObject("Shell.Application")

迟装订是一种对话。

YourProg:嗨,shell,您有namespace命令吗?

壳牌:是的,我知道,这是5号命令。

YourProg:请执行命令5-这是参数

Shell:这是返回数据(如果有的话)。

早期绑定您的程序是用GUID和跳转到vtable中的第5偏移量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35882629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档