Video Screencast Help
Symantec to Separate Into Two Focused, Industry-Leading Technology Companies. Learn more.

Updating a dll in wise installation, binary table?

Created: 01 Sep 2010 • Updated: 02 Sep 2010 | 13 comments

Hello,

I have a problem with a wise installation that i didnt create from the beginning. The problem is i want to update a dll that is called in script as "Call custom dll from installation". I have dropped the new version of the dll in the wise installation folder, but when i run the installation calling this dll it doesnt recognize the new function in the dll. i went on a wise course a while a go and i remember that the etacher said that when you add a dll call, using "call custom dll from installation", then the dll is embedded in some binary table if you have to update the dll, then you need to export/import something. I have looked in the installation, but doesnt find anything, please help would be appreciated.

Regards /Mikael

Comments 13 CommentsJump to latest comment

mibswed's picture

Found the solution. Find the right WiseCustomcallaX in the binary table mark binary data and press F2, intuitive isnt it :-), then import the new dll into binary table, ok. But, as i had a lot of WiseCustomCalla11, WiseCustomCalla17, WiseCustomCalla 22 etc, calling this dll, how do i know which one is the right one? I was lucky to remember the error message from the last installation try, so i knew it was WiseCustomCalla22 that was involved in my new dll call.

Also, seems sometimes there's a extra WiseCustomCallaX added for a new dll call and sometimes an old one is reused (although calling the same dll) howcome is that? i dont understand the logics here? Should it only be one WiseCustomCalla per dll? Then my installer project is corrupt?

The more you know, the more questions pop up..

Regards /Mikael

EdT's picture

You can export tables from your MSI using ORCA. By exporting the Binary table you should be able to figure out which DLL you need to update from the file size, and then use ORCA to delete the file and import the new one
Not really intuitive is it?

If your issue has been solved, please use the "Mark as Solution" link on the most relevant thread.

mibswed's picture

Ok, thank you EdT, but its possible also directly from Installation Studio, by pressing f2 on the right item in the binary-table. But, can you explain why i have soo many WiseCustomCallaX entries in the binary table, for the same dll? Is it one entry for each dll call? How to figure it which ones are used and which ones are not, as Wise doesnt tidy up when changing things...

EdT's picture

The only way to identify which actions are relevant is to look at the InstallUI and InstallExecute sequences and find which WiseCustomCallaX references are still in there.

If your issue has been solved, please use the "Mark as Solution" link on the most relevant thread.

mibswed's picture

Those tables dont show the WiseCustomCallaX entries at all, although at least one of those dll calls are defined, soo were to identify i have no clue?

mibswed's picture

I will clarify:

My binary table had 8 WiseCustomCallaX entries, all refering to the same dll, i have problem with.

In script, there are only two calls to this dll (Call custom dll from installation).

Table WiseStreamFiles have the same entries as the binary table.

Those tables are the only ones i can find WiseCustomCallaX entries in.

Now i will try to remove all these WiseCustomCallaX entries, except one and see if that solves my problem...

Mistral's picture

You should see the calls in the CustomAction table.

mibswed's picture

Yes, the calls, but not the WiseCustomCallaX entries!, the ones responsible for streaming the dll file to disk, during installation (remeber its a Call custom dll from installation call).

Mistral's picture

Hmm ... which information you are missing?

When i double click the custom action in the MSI script view i see:
- action name
- dll file
- function

In the WiseStreamFiles you see
- Name (WiseCustomCallX)
- dll file

So it goes action -> dll -> name

If i remember right you can open the WiseCustomCall.dll with notepad (urgs) and at the end you see:
WiseCustomCallX function

mibswed's picture

The Questions was have to identify the used WiseCustomCallaX entries in the StreamFile table, as in my installation project (not created by me in the beginning) there is about ten entries WiseCustomCallaX in the StreamFile table, although there where only two calls for streamed dll.

I solved the problem by removing all script calls, removing all WiseCustomCallaX in the StreamFile table and then re-adding the script call again, voilá, only one entry then in the StreamFile table and all is ok! Seems that Wise doesnt necessarily clean up after itself, or i dont know why i had that much redudant entries in the StremFile table.

Still though, having problem with sequencing one call in the dll. Placing it before RemoveExistingProducts is ok, but not after, not anywhere! Placing it somewhere before InstallFinalize in Execute deferred gives error "Error in custom action WiseCustomCalla24, dll not found or invalid...". Placing it after InstallFinalize gives internal error 2762. But, as said, it works before RemoveExistingProducts! The call restores some backup folders to the program installation folder.

mibswed's picture

I should say i removed the WiseCustomCallaX entries from the binary table and nothing else, the Streamfiles table is updated automatically (View?).

EdT's picture

Check the configuration of Windows Installer Editor - by default, quick compile is turned on, and experience has shown that it is safer to have it turned off, as a series of edits followed by partial (quick) compiles frequently results in a munged project.
Deleting any existing MSI before compiling the WSI has the same effect.

If your issue has been solved, please use the "Mark as Solution" link on the most relevant thread.