https://bugs.winehq.org/show_bug.cgi?id=44694
Bug ID: 44694 Summary: Puredata 0.48: cscript, cannot install plugins Product: Wine Version: 3.3 Hardware: x86 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: -unknown Assignee: wine-bugs@winehq.org Reporter: jp-dev@inbox.ru Distribution: ---
Pd has a feature to download and install plugins into the software from an internet repository.
Most plugins are contained in zip files. On Wine, these zips don't extract. It's because the Windows version invokes a vbs file for the extraction, and in Wine this fails.
OS: Arch Linux x86_64, latest
How to reproduce: 1) Install Pd 0.48 vanilla. (http://puredata.info/downloads/pure-data) 2) Run bin/pd.exe. Open Help>Find externals. 3) Enter search terms for a particular package (eg. "cyclone") 4) Pick one of the .zip versions. It shows the destination folder. Click yes to validate. 5) There is a silent failure. The destination folder is empty.
This appears in the console 003a:fixme:vbscript:VBScript_SetScriptState unimplemented SCRIPTSTATE_INITIALIZED 003a:fixme:vbscript:do_mcall NULL obj
Detail: This is the source of the script in question, relevant lines highlighted, embedded in Tcl code. https://git.io/vApzO
In my limited understanding of vbs, I think it's because Shell.NameSpace is attempted on a path which is not an ordinary directory, but a zip archive. It returns the NULL value and results in the error message seen above.
https://bugs.winehq.org/show_bug.cgi?id=44694
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |download Ever confirmed|0 |1 Summary|Puredata 0.48: cscript, |Puredata 0.48 fails to |cannot install plugins |install plugins (no support | |to manage .zip files via | |shell namespace as | |'CompressedFolder') CC| |focht@gmx.net URL| |http://puredata.info/downlo | |ads/pure-data Component|-unknown |shell32 Status|UNCONFIRMED |NEW
--- Comment #1 from Anastasius Focht focht@gmx.net --- Hello folks,
confirming.
Smaller testcase:
--- snip --- set objShell = CreateObject("shell.application") set objFilesInZip = objShell.NameSpace("c:\test.zip").items
WScript.echo objFilesInZip.Count --- snip ---
Trace log:
--- snip --- $ WINEDEBUG=+seh,+relay,+ole,+variant,+vbscript,+shell wine cscript.exe test.vbs >>log2.txt 2>&1 ... 0037:trace:shell:ShellDispatch_QueryInterface (0x14c358,{a6ef9860-c720-11d0-9337-00a0c90dcaa9},0x33fa50) 0037:warn:shell:ShellDispatch_QueryInterface not implemented for {a6ef9860-c720-11d0-9337-00a0c90dcaa9} 0037:trace:vbscript:disp_call using IDispatch ... 0037:trace:ole:dump_DispParms args=1 named args=0 0037:trace:ole:dump_DispParms args: 0037:trace:ole:dump_DispParms [0] 0x14c1a0 {VT_BSTR: L"c:\\test.zip"} 0037:trace:ole:ITypeInfo_fnInvoke invoking: L"NameSpace"(2) parm0: L"vDir" parm1: L"ppsdf" memid is 60020002 Param 0: tdesc.vartype 12 (VT_VARIANT) u.paramdesc.wParamFlags PARAMFLAG_FIN u.paramdesc.lpex (nil) Param 1: tdesc.vartype 26 (ptr to ptr to VT_USERDEFINED ref = 2bc) u.paramdesc.wParamFlags PARAMFLAG_FOUT PARAMFLAG_FRETVAL u.paramdesc.lpex (nil) funckind: 1 (pure virtual) invkind: 1 (func) callconv: 4 (stdcall) oVft: 36 cParamsOpt: 0 wFlags: 0 elemdescFunc (return value type): tdesc.vartype 25 (VT_HRESULT) u.paramdesc.wParamFlags PARAMFLAGS_NONE u.paramdesc.lpex (nil) helpstring: (null) entry: invalid ... 0037:trace:ole:DispCallFunc arg 0: type VT_VARIANT 0x1584e8 {VT_BSTR: L"c:\\test.zip"} ... 0037:trace:shell:ShellDispatch_NameSpace (0x14c358,0x33e680 {VT_BSTR: L"c:\\test.zip"},0x33e820) 0037:trace:shell:SHGetDesktopFolder (0x33e600) ... 0037:trace:shell:ISF_Desktop_fnParseDisplayName (0x158598)->(HWND=(nil),(nil),0x158544=L"c:\\test.zip",(nil),pidl=0x33e698,0x33e66c) 0037:Call shlwapi.PathGetDriveNumberW(00158544 L"c:\\test.zip") ret=7eb965f5 ... 0037:trace:shell:SHELL32_ParseNextElement (0x158598, (nil), 0x1585f8, L"c:\\test.zip") 0037:trace:shell:ISF_Desktop_fnBindToObject (0x158598)->(pidl=0x1585f8,(nil),{000214e6-0000-0000-c000-000000000046} (IID_IShellFolder),0x33e0b0) 0037:trace:shell:SHELL32_BindToChild (0x14c490 L"C:\users\focht\Desktop" 0x1585f8 {000214e6-0000-0000-c000-000000000046} 0x33e0b0) ... 0037:trace:shell:SHELL32_CoCreateInitSF (0x14c490 L"C:\users\focht\Desktop" 0x158618 {9d20aae8-0625-44b0-9ca7-71889c2254d9} 0x33dfe8) ... 0037:trace:shell:ShellFolder2_ParseDisplayName (0x158658)->((nil) (nil) L"c:\\test.zip" (nil) 0x33e0b4 0x33e66c) ... 0037:trace:shell:UNIXFS_build_shitemid (pszUnixPath="/home/focht/.wine/drive_c", bMustExist=T, pFindData=(nil), pIDL=0x158768) ... 0037:trace:shell:SHELL32_ParseNextElement -- pidl=0x1587f0 ret=0x00000000 0037:trace:shell:ISF_Desktop_fnParseDisplayName (0x158598)->(-- ret=0x00000000) 0037:trace:shell:SHGetDesktopFolder (0x33e638) 0037:trace:shell:ISF_Desktop_Constructor unkOut=(nil) {000214e6-0000-0000-c000-000000000046} (IID_IShellFolder) ... 0037:trace:shell:SHGetDesktopFolder -- 0x33e638->(0x158598) 0x00000000 0037:trace:shell:ISF_Desktop_fnBindToObject (0x158598)->(pidl=0x1587f0,(nil),{93f2f68c-1d1b-11d3-a30e-00c04f79abd1} (IID_IShellFolder2),0x33e63c) 0037:trace:shell:SHELL32_BindToChild (0x14c490 L"C:\users\focht\Desktop" 0x1587f0 {93f2f68c-1d1b-11d3-a30e-00c04f79abd1} 0x33e63c) ... 0037:trace:shell:ShellFolder2_BindToObject (0x158638)->(0x158804 (nil) {93f2f68c-1d1b-11d3-a30e-00c04f79abd1} 0x33e63c) ... 0037:trace:shell:SHELL32_BindToChild -- returning ((nil)) 0x80070002 ... 0037:trace:ole:DispCallFunc retval: 0x33e830 {VT_ERROR: 00000001} 0037:trace:variant:VariantClear (0x1584e8 {VT_BSTR: L"c:\\test.zip"}) ... --- snip ---
Even then, there is no default handler/COM object in Wine for ShellFolder virtual folder that represents the .zip archive. 'CompressedFolder' object CLSID '{E88DCCE0-B7B3-11D1-A9F0-00AA0060FA31}'.
$ sha1sum pd-0.48-1.msw.zip 7fda36f2fafb343311914d9b37d1b8b8ac4a9d15 pd-0.48-1.msw.zip
$ du -sh pd-0.48-1.msw.zip 8.1M pd-0.48-1.msw.zip
$ wine --version wine-3.3-128-gdfde119538
Regards