BevelButton.DeleteAllRows error in Windows10

I haven’t compiled this project for Windows in a couple of weeks of changes. I am getting a runtime error from windows, “Common\plugin.cpp:957
Failure Condition: pluginEntryTable.GetEntry( entrypointName, out)
can’t find plugin method BevelButton.DeleteAllRows”

It compiles fine on OSX. There are no bevel buttons in the project. I am using the DeleteAllRows method on a PopUpMenu and several ListBoxes. But I think I have before without issue. I tried not using it on the PopUpMenu but still get the error.

Any ideas, anyone?

That happens when the EXE can’t find the Libs (DLLs) folder. Common mistake is to zip the EXE + Libs folder and then the user tries to run the EXE from within the Zip file - windows offers to do this, but it doesn’t work.

This is why you really want an installer on Windows.

amen!

I am using an installer on Windows, created by Inno. It has worked before. The Libs folder isn’t zipped. But that made me NOT use the installer and just double click on the exe, and it works. I assume that all of the DLLs have been installed by previous iterations on this project. However Window 10 has a VERY annoying habit of updating itself in unknown, uncontrollable, and unstoppable ways. Why would the installed version not work and the non-installed version work? Would they not access the same DLLs?

You should look in Program Files(x86) and check if indeed all the DLLs are present. It is easy with InnoSetup to forget something.

All the files are present - I think. How do you know that one is missing? Where do the Dlls get put - into the Windows system folder on in the Program file folder? All of the Dlls in the Xojo build file appear to have been put in the Program file folder.

The puzzler is that if I just drag the .exe onto the Windows 10 system and double click it, it works. But if I build the installer using Inno, and install using that, it doesn’t. That seems very strange to me.

Just compare what has been placed in a folder within Program Files(x86) with what Xojo placed in the Build folder. Everything must be copied identically.

I thought I had checked that but I will again. But so I am clear on this: If I wanted to install the program without an installer, it is sufficient to copy all of the files that Xojo put in the build folder into the program folder in Program Files(x86)? I will also try that.

I am still puzzled as to why the .exe dragged onto the Windows desktop will run, but the same file compressed by Inno and then installed does not.

[quote=313313:@Jon Fitch]I thought I had checked that but I will again. But so I am clear on this: If I wanted to install the program without an installer, it is sufficient to copy all of the files that Xojo put in the build folder into the program folder in Program Files(x86)? I will also try that.

I am still puzzled as to why the .exe dragged onto the Windows desktop will run, but the same file compressed by Inno and then installed does not.[/quote]
the installer is not installing all the files needed for the application.

Sounds like you already also have all the support dlls on the desktop too.

We have had this discussion in another thread

Whatever FOLDER you put the EXE into, must have the support DLLS in the same folder, or in the subfolders generated by Xojo

/Folder
MY.EXE
/MY Resources
/MY Libs

OK, more clues: yes, the folder created by Xojo is on the desktop along with the .exe created by Xojo. This runs fine. What appears to be identical files are in the Programs Files(x86). This .exe does not run, and generates the error. If I drag the .exe from the desktop into the folder, it also does not run, getting the same error. If I drag all of the files in the folder on the desktop into the Programs Files(x86) folder (replacing them) it still does not run. But - AHA! - if I drag the folder from the desktop into the Programs etc. folder, it does run.

So the Xojo generated folder of Dlls must be in the Programs Files(x86) folder, not the files? ie. they must be in a folder with the .exe’s name in the Programs folder, not at the same level as the .exe?

It may work if all the DLLs in the Windows System folder are correctly registered and the correct version

It is even more curious: it definitely depends on the DLLs in the application folder, if any are renamed to something like dll.old, I get a failure to find that file error. Reverse engineering further, the ONLY DLL file that needs to be in the folder named Application Libs (Score Libs in my case) is the one named Appearance pak.dll. All the others can be moved one level up to the Score folder in Program Files(x86) and it will still run. It is the failure to find that file that causes the error quoted in the OP. If the folder is renamed it also fails to find the file.

What is the expected behavior? Where are the dll files generated by Xojo supposed to be placed? What causes this file, Appearance pak.dll to be generated? In older versions of my project, or Xojo, this was not generated.

This is wrong

This is wrong

You have so many folders and DLLs floating about on this machine you cannot test this cleanly.

Depending on the version of Xojo you use, the exe will be accompanied by a number of folders.
Whatever the nature of these folders, you should simply replicate for your Inno setup.

This is my Innosetup for files created by Xojo 2013, where i am shipping the app, a couple of DLLs I need which are in the same folder, and the subfolders created by Xojo

[Files] Source: "C:\\RB_STUFF\\MyApp\\MyApp.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\\RB_STUFF\\MyApp\\twain32.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\\RB_STUFF\\MyApp\\zlib1.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\\RB_STUFF\\MyApp\\Resources\\*"; DestDir: "{app}\\Resources"; Flags: ignoreversion recursesubdirs createallsubdirs ; Attribs: hidden; Source: "C:\\RB_STUFF\\MyApp\\MyApp Libs\\*"; DestDir: "{app}\\MyApp Libs"; Flags: ignoreversion recursesubdirs createallsubdirs ; Attribs: hidden;

Later Xojo (2015 I think) names the Resources folder too:

[Files] Source: "C:\\RB_STUFF\\MyApp\\MyApp.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\\RB_STUFF\\MyApp\\twain32.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\\RB_STUFF\\MyApp\\zlib1.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\\RB_STUFF\\MyApp\\MyApp Resources\\*"; DestDir: "{app}\\Resources"; Flags: ignoreversion recursesubdirs createallsubdirs ; Attribs: hidden; Source: "C:\\RB_STUFF\\MyApp\\MyApp Libs\\*"; DestDir: "{app}\\MyApp Libs"; Flags: ignoreversion recursesubdirs createallsubdirs ; Attribs: hidden;

But given that it has a createallsubdirs option, you can probably get away with this:

[Files] Source: "C:\\RB_STUFF\\MyApp\\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs ;

Actually there aren’t any copies of the dlls other than the ones I or Inno have created and their locations are well defined. However, the answer appears to be that Xojo intends to have the dll files in a subfolder called “App Libs” or just “Libs” - but has in the past been tolerant of the dlls being installed in the same directory with the .exe and will find them there. This is the default structure that the Inno Wizard creates, and has worked multiple times for me on this same application in past. With the addition of the Appearance pak.dll, it is no longer tolerant of that particular file being at the same level as the .exe, it must be in a subfolder with that name.

I like the createallsubdirs flag, this recreates the file structure that Xojo writes when you compile? But then I must have a [files] entry that fills the subdirs?

[Files] is just the tag that determines when the list of files begins in the script
what follows are rows of ‘things you want to pick up from your drive (Source) and where you want to put them on the target (DestDir)’

{app} is a shorthand for ‘the install folder chosen by the user’, usually a subfolder in Program Files named for your app

For reference:

I don’t use InnoSetup but I suppose it is possible to point it to the folder containing the build (exe, lib and resources folders). Then simply have all the content recursively placed in the install folder and point a shortcut to the exe.

You should definitely read the literature Paul linked above.

Yes, [files] section entry I should have said. I have read most of the literature, the printed stuff is maybe a little out of date.

In the end it was operator error, contributed to by the fact that the Xojo created app is tolerant of some files not being where they really should be, but particular about others. It took some experimentation to discover this, and then wade through the Innosetup documentation which is a little dense.

I do appreciate the help which eventually got me pointed the right way.

As a matter of principle, all files in the folders created by the build for the app should be kept. Don’t play DLL roulette and second guess which ones should be here or not.