View Full Version : VISTA: CA calling standard DLL

06-09-2006, 02:17 PM
I have a custom action that calls a function in a standard DLL that is installed with the product. I'm moving the DLL to %WINDIR%\System32 and running it from there.

The CA runs correctly in XP, but on VISTA Beta2 the CA always fails with:

InstallShield DLL Custom Action
! Unknown source "mydll.dll".

The relevent portion of the log file looks like this:

MSI (s) (48:28) [01:39:31:929]: Executing op: FileCopy(SourceName=mydrv~1.DLL|mydll.dll,SourceCabKey=mydll.dll,DestName=mydll.dll,Attributes=16384,FileSize=57344,PerTick=32768,,VerifyMedia=1,,,,,CheckCRC=0,,,InstallMode=58982400,HashOptions=0,HashPart1=-168601052,HashPart2=-459143132,HashPart3=2044559537,HashPart4=1005687676,,)
MSI (s) (48:28) [01:39:32:038]: File: C:\Windows\system32\mydll.dll; To be installed; Won't patch; No existing file
MSI (s) (48:28) [01:39:32:038]: Source for file 'mydll.dll' is compressed
InstallFiles: File: mydll.dll, Directory: C:\Windows\system32\, Size: 57344
MSI (s) (48:28) [01:39:32:038]: SOFTWARE RESTRICTION POLICY: Verifying object --> 'C:\Windows\Installer\38a30.msi' against software restriction policy
MSI (s) (48:28) [01:39:32:038]: Note: 1: 2262 2: DigitalSignature 3: -2147287038
MSI (s) (48:28) [01:39:32:038]: SOFTWARE RESTRICTION POLICY: C:\Windows\Installer\38a30.msi is not digitally signed
MSI (s) (48:28) [01:39:32:038]: SOFTWARE RESTRICTION POLICY: C:\Windows\Installer\38a30.msi is permitted to run at the 'unrestricted' authorization level.
MSI (s) (48:28) [01:39:32:038]: Note: 1: 2318 2: C:\Windows\system32\mydll.dll
MSI (s) (48:28) [01:39:32:054]: Note: 1: 2360
MSI (s) (48:28) [01:39:32:054]: Executing op: SetTargetFolder(Folder=C:\Windows\system32\drivers\)
MSI (s) (48:28) [01:39:32:054]: Executing op: SetSourceFolder(Folder=1\System32\drivers\)
MSI (s) (48:28) [01:39:32:054]: Executing op: FileCopy(SourceName=mydrv.sys,SourceCabKey=mydrv.sys,DestName=mydrv.sys,Attributes=16384,FileSize=18816,PerTick=32768,,VerifyMedia=1,,,,,CheckCRC=0,Version=,Language=1033,InstallMode=58982400,,,,,,,)
MSI (s) (48:28) [01:39:32:195]: File: C:\Windows\system32\drivers\mydrv.sys; To be installed; Won't patch; No existing file
MSI (s) (48:28) [01:39:32:195]: Source for file 'mydrv.sys' is compressed
InstallFiles: File: mydrv.sys, Directory: C:\Windows\system32\drivers\, Size: 18816
MSI (s) (48:28) [01:39:32:226]: Note: 1: 2318 2: C:\Windows\system32\drivers\mydrv.sys
MSI (s) (48:28) [01:39:32:242]: Executing op: CacheSizeFlush(,)
MSI (s) (48:28) [01:39:32:242]: Executing op: ActionStart(Name=Install_My_Service,,)
Action 1:39:32: Install_My_Service.
MSI (s) (48:28) [01:39:32:257]: Executing op: CustomActionSchedule(Action=Install_My_Service,ActionType=3073,Source=BinaryData,Target=DLL3,CustomActionData=C:\Windows\system32\drivers\mydrv.sys)
MSI (s) (48:28) [01:39:32:351]: Creating MSIHANDLE (12) of type 790536 for thread 2088
MSI (s) (48:EC) [01:39:32:398]: Invoking remote custom action. DLL: C:\Windows\Installer\MSI9D1F.tmp, Entrypoint: DLL3
MSI (s) (48:4C) [01:39:32:398]: Generating random cookie.
MSI (s) (48:4C) [01:39:32:413]: Created Custom Action Server with PID 3068 (0xBFC).
MSI (s) (48:B8) [01:39:33:195]: Running as a service.
MSI (s) (48:B8) [01:39:33:195]: Hello, I'm your 32bit Elevated custom action server.
MSI (s) (48:EC) [01:41:28:694]: Closing MSIHANDLE (12) of type 790536 for thread 2088
Action ended 1:41:28: InstallFinalize. Return value 3.

At this point the rollback procedure starts.

What is different about Vista that won't allow the CA to find the dll that I installed? It's calling the correct entry point in my DLLWrap.ini file and all of the arguments are correct. But it always terminates before it executes the call..



06-12-2006, 10:21 AM
Hmm. I'm not aware of any differences either in our DLL wrapper or on Vista that would necessarily result in this. Is it possible your DLL has a dependency that is missing on Vista? Are you running on 32-bit systems in both cases?
I'll try running a sample here just as a sanity check; I'd appreciate any more details that would let me come closer to reproducing your scenario.