Question

This is a problem I have been battling with for a few days and am now at my wits end. I am creating an MSI with Wise Installation Studio but I would bet it could be repro'd with any MSI authoring program. I have created a test sample for those that wish to repro with the MSI, DLL or WSI files that I have posted.

  1. Create a new wise solution, saved as 'test.wsi' and creates 'test.msi'
  2. Do nothing to this file except to add two custom actions after the MigrateFeaturesState action in the 'UI Sequence'
  3. The first custom action is a 'Call DLL From Installation' that passes in no parameters and ignores the return code
  4. The second custom action is a 'Call Custom DLL From Installation' that passes in no parameters and ignores the return code
  5. Both actions reference the same DLL and same function, helloworld.dll and HelloWorld() function that just displays a 'HelloWorld' Message box

Expected Result: Two hello world prompts and then the regular UI screen to start the installation process.

Here is my current setup: Development Box: - Wise Installation Studio 7.4.0.214 - Win7 x64 running with UAC turned off,

Test Box: - Windows XP SP3 - Windows Installer v4.5.6001.22159 - .Net Framework v4.0

Here are my test cases:

  1. Non-admin with ascii user name - Results are as expected for both 'ALLUSERS=""' and ALLUSERS="1"
  2. Admin with unicode characters in name 'あくぇえ' - Results are as expected for both 'ALLUSERS=""' and ALLUSERS="1"
  3. Non-admin with unicode characters in name '发涩' - Only the first prompt appears and an error is displayed for the second as follows: "Error in custom action. The library C:\Documents and Settings\??[LongAlphaNumericString].TMP\WiseCustomCalla.dll is invalid or could not be found." This happens for both 'ALLUSERS=""' and ALLUSERS="1"
  4. Login with another admin and set user in #3 to admin, login with user in #3 again and we get the expected results.

I've tried messing around with forcing short paths and passing in an alternate path to the users data folder but nothing works. Anyone know why this is happening and how to fix it? I've included all the files I used for this testing here, this includes a screen shot of the error message, the msi and msi.xml, the wsi file, the helloworld.dll (test with rundll32 helloworld.dll,HellowWorld) and logs for each test case above.

http://dl.dropbox.com/u/1797288/error.zip

What needs to be changed in the MSI/WSI file so that #3 works correctly for the 'Call Custom DLL from Installation' action?

Thanks, Aaron P

Was it helpful?

Solution

I think the problem is caused by the way these DLLs are handled. A DLL from installation is stored in Binary table and automatically extracted during install. It's native, so it works as expected.

Call custom DLL from installation most likely uses an incorrect path for extracting the DLL during install. It may be a per-machine location which cannot be accessed by a non-admin user.

Try building the MSI with a codepage that supports the Unicode characters (you can set the MSI language). Also, try creating a log and post the actual DLL path.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top