extractZipFile problem
-
@d-healey said in extractZipFile problem:
These might be useful:
Not sure how to use these, I guess I can check the directory has write permission, but not sure how to use the other (setExecutePermission) to set the write permissions...oh hang on theres:
File.setReadOnly
Perhaps thats it...
-
@Lindon nope cant get that to work either...
-
@Lindon I don't know where you ended up with this, but I'm leaving this here in case someone needs this:
const d = FileSystem.getFolder(FileSystem.Downloads); const absFolder = FileSystem.fromAbsolutePath("/Library/Audio/Plug-Ins/VST3"); inline function onButton1Control(component, value) { if(!value) return; local f = d.getChildFile("myFile.zip"); local write = absFolder.hasWriteAccess(); //should return 1 local exec = absFolder.setExecutePermission(true); //should return 1 local unzip = f.extractZipFile(absFolder, true, extractCB); }; Content.getComponent("Button1").setControlCallback(onButton1Control); function extractCB(obj) { Console.print(trace(obj)); };
I don't know if this one really applies here though (shouldBeExecutable ?) :
File.setExecutePermission(bool shouldBeExecutable)
-
@Matt_SF - yeah - but no, heres my code:
var tempVSTFolder = FileSystem.fromAbsolutePath("C:/Program Files/Common Files/VST3"); Console.print("temp VST is a real DIR?:" + tempVSTFolder.isDirectory()); Console.print(".........is VST Folder writable?:" + tempVSTFolder.hasWriteAccess()); var tempCompanyVSTFolder = tempVSTFolder.createDirectory("TEMPTESTCo"); Console.print("temp **COMPANY** VST is a real DIR?:" + tempCompanyVSTFolder.isDirectory()); Console.print("is Co Folder writable?:" + tempCompanyVSTFolder.hasWriteAccess()); var tempVSTFile = tempCompanyVSTFolder.getChildFile("temp.VST3"); Console.print("...does the file exist?:" + tempVSTFile.isFile());
and heres the results I see:
Interface: temp VST is a real DIR?:1 Interface: .........is VST Folder writable?:1 Interface: temp **COMPANY** VST is a real DIR?:0 Interface: is Co Folder writable?:1 Interface: ...does the file exist?:0
So none of this adds up...
it says "C://Program Files/Common Files/VST3 is a real directory and it has write access, but....
when I create the subFolder it says its NOT a real directory BUT it is writeable (so thats just plain odd right there...)
I try creating a file in this writable folder and it doesnt exist...
-
@Matt_SF said in extractZipFile problem:
@Lindon I don't know where you ended up with this, but I'm leaving this here in case someone needs this:
const absFolder = FileSystem.fromAbsolutePath("/Library/Audio/Plug-Ins/VST3"); inline function onButton1Control(component, value) { if(!value) return; local absFolder = d.getChildFile("myFile.zip"); local write = absFolder.hasWriteAccess(); //should return 1 local exec = absFolder.setExecutePermission(true); //should return 1 Console.print(write); };
..and looking at this I think its not even testing the problem:
local absFolder = d.getChildFile("myFile.zip");
isnt actually doing anything (unless you've declared d somewhere else...)
it should be:
local someFile = absFolder.getChildFile("myFile.zip");
-
@Lindon ah, my bad, I cut the script I posted and this line was missing (AND I miswrote the thing when I posted it you're right !!!, but when I tried it here I got it right, otherwise I obviously wouldn't have said so).
const d = FileSystem.getFolder(FileSystem.Downloads);
(I've edited it)
I just took a random zipFile I had in my downloads folder to unzip it in the VST3 folder.Regarding the script you posted, this is my output :
Interface: temp VST is a real DIR?:1 Interface: .........is VST Folder writable?:1 Interface: temp **COMPANY** VST is a real DIR?:1 Interface: is Co Folder writable?:1 Interface: ...does the file exist?:0
The "TEMPTESTCo" folder is indeed created here in the folder.
There is definetely something messing up the whole thing... -
@Matt_SF -hmm yeah it looks like even yours ISNT creating temp.VST3
@Christoph-Hart - I think the problem here is about access permissions, to create(or remove) anything in
C://Program Files/Common Files/VST3
requires administrator permission - and this is usually the state of affairs in all "normal" windows environments, I think here that the calls are being unsuccessful because they dont have this level of permission, so we need:
-
the existing calls to provide some level of feedback about the error that is occurring, and not to behave as if all is well in subsequent calls...
-
Some way of setting the user to Administrator for these calls...
Otherwise I have no way of writing anything to this folder...and my installer really needs to do this..
Of course I could be totally wrong, not -as we all know- such an unusual situation...
-
-
@Lindon aaah I just remebered... for the test example you posted, I've scratched my head on this before. Actually the file isn't created unless you write something in it :
var tempVSTFolder = FileSystem.fromAbsolutePath("/Library/Audio/Plug-Ins/VST3"); Console.print("temp VST is a real DIR?:" + tempVSTFolder.isDirectory()); Console.print(".........is VST Folder writable?:" + tempVSTFolder.hasWriteAccess()); var tempCompanyVSTFolder = tempVSTFolder.createDirectory("TEMPTESTCo"); Console.print("temp **COMPANY** VST is a real DIR?:" + tempCompanyVSTFolder.isDirectory()); Console.print("is Co Folder writable?:" + tempCompanyVSTFolder.hasWriteAccess()); var tempVSTFile = tempCompanyVSTFolder.getChildFile("temp.VST3"); tempVSTFile.writeString("Write something in the file to create it"); Console.print("...does the file exist?:" + tempVSTFile.isFile());
Interface: temp VST is a real DIR?:1 Interface: .........is VST Folder writable?:1 Interface: temp **COMPANY** VST is a real DIR?:1 Interface: is Co Folder writable?:1 Interface: ...does the file exist?:1
But that doesn't explain why unzipping a file doesn't work on your machine...
Would this be a workaround for your issue ? Maybe create the folder, write a dummy txt file so the folder is actually created, then write the file you need in that folder ?
-
@Matt_SF - nope no change there...
var tempVSTFolder = FileSystem.fromAbsolutePath("C:/Program Files/Common Files/VST3"); Console.print("temp VST is a real DIR?:" + tempVSTFolder.isDirectory()); Console.print(".........is VST Folder writable?:" + tempVSTFolder.hasWriteAccess()); var tempCompanyVSTFolder = tempVSTFolder.createDirectory("TEMPTESTCo"); Console.print("temp **COMPANY** VST is a real DIR?:" + tempCompanyVSTFolder.isDirectory()); Console.print("is Co Folder writable?:" + tempCompanyVSTFolder.hasWriteAccess()); var tempVSTFile = tempCompanyVSTFolder.getChildFile("temp.txt"); tempVSTFile.writeString("temp value here"); Console.print("...does the file exist?:" + tempVSTFile.isFile()); Console.print("is writable?:" + tempVSTFile.hasWriteAccess());
still no file and no folder...
-
@Lindon damn...
What's weird is that, if you need admin rights to execute these kind of functions - even in HISE - you should be prompted to grant access to the system folders or not... -
@Matt_SF said in extractZipFile problem:
@Lindon damn...
What's weird is that, if you need admin rights to execute these kind of functions - even in HISE - you should be prompted to grant access to the system folders or not...yeah, something's not right....
-
What happens if you start HISE as administrator (via right click)?
There‘s not much you can do here on my side - either you have the permission or not.
-
@Christoph-Hart - yeah that works - I guess the end-user will have to run the installer as admin..
Thanks.
-
@Christoph-Hart said in extractZipFile problem:
What happens if you start HISE as administrator (via right click)?
There‘s not much you can do here on my side - either you have the permission or not.
-- tell me how does this not trip up inno then? (Because I don't think it has permission..)
Unless of course inno tells the os(Windows) that it intends to change something and requires admin access, at which point(before the UI appears) Windows pops its "Will you allow this app to do its thing?" dialog. If so, and I think this is the case, what do we need in HISE to enable this windows call on execution?
-
Or can I just set the "Run as Administrator" Flag in the compiled apps properties , and this would make my downloaded app run as administrator every time?
It should be clear I have no idea about this , anyone have any experience?
-
@Lindon An Inno installer will prompt for permission I think
-
@d-healey said in extractZipFile problem:
@Lindon An Inno installer will prompt for permission I think
yeah -- and I think I might know how to make my app ask for permissions too.... just testing with a 3rd party now....
-
@Lindon Excellent, let us know your results. I need this feature too, in fact I've already implemented it but I didn't test it on Windows and MacOS yet, I might try this afternoon if I have some time.
-
@d-healey sadly the simple "set in my window for all users" - doesnt work...we need a mechanism to define our app to open in admin mode...
-
looks like it could be a setting in the manifest file in the Linker...
C++: Run program as administrator
Some programs are automatically asking for administrator rights when you run them. These programs are marked with a little shield in the bottom right corner: Now I'm wondering how I could accompl...
Stack Overflow (stackoverflow.com)