In this example, HandNet v2 needs to be installed on Windows 7. The setup.inx file for HandNet says that Adobe Reader 4.05 must be present. Good luck installing that! Instead of wasting my time trying to get a 15(!) year old version of Adobe Reader to install just to appease this setup procedure, I decided to tackle the logic instead.
The interesting bits of HandNet's setup.inx file are located between offsets 0x000067A3 and 0x00007300. I patched the INX file so that the conditions to install Adobe Reader 4.05 would never be met, and the installation would continue on its way.
Installshield Setup Inx
Yes, we packaged the TEM Client for Windows setup as a Software Package Block in Tivoli Configuration Manager. When we use TCM to install the SPB to a Windows server, it hangs at the point indicated in the log file segment I posted. No pop-up dialog occurs on the Windows server target and eventually the Tivoli distribution times out.
Here are steps I used to successfully debug an InstallShield uninstall DLL from withinMicrosoft's Visual C++ 5.0. For the sake of this discussion, my uninstall DLL iscalled UninstCPL.dll. Insert a HARD breakpoint (this is crucial) at the beginning of whichever routine you wish to debug. I was not able to get the breakpoint set from the IDE to work. However, once the hardcoded breakpoint is hit, then subsequent breakpoints, manipulated with the IDE, work fine. In my case, I inserted the following at the beginning of UninstInitialize():
#ifdef _DEBUG _asm int 3#endif By the way, I was able to use a call to DebugBreak() instead, but once that hit, I was kicked into a disassembler window. Breakpoints set from the IDE would not work. I managed to "step over" (F10), and by closing the disassembler window, I finally resynchronized with the source code. That done, breakpoints set from the IDE worked, and the rest was able to be debugged normally.
Build a debug version of the DLL.
In InstallShield, delete the link to the release version of the DLL, and a link to the debug version of the DLL, e.g. ....\UninstCPL\Debug\UninstCPL.dll
In InstallShield, build the setup and install the product (I'm assuming that InstallShield is on the same machine as that running the Visual C++ IDE, and that the product can be installed on the same system.
(The rest of the steps are in the Visual C++ IDE) Open Project->Settings Debug Tab.
With Category: General, set "Executable for Debug Session" to C:\WINNT\IsUninst.exe (or whatever drive and %windir% your system has)
And set "Program Arguments" to:
-f"" -c"" You should get the command and path arguments out of the registry entry under: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\
With Category: Additional DLLs, set Local Name to: and I had the box checked to load the symbols right away. (I did not check "Try to locate other DLLs")
Now cause the uninstall to execute via the Visual C++ IDE: Build->Start Debug->Go (or just the corresponding push button) The hard-coded break point will hit, and I saw an arrow next to that line in the IDE. I was able to debug normally.
Written by Charlie Rundles
This tool lets you easily: test setup extension DLLs for loading and unloading
test files for self-registration and un-registration
test the UninstInitialize and UninstUnInitialize functions in a custom uninstall DLL
dlltester.zip (133.214 Bytes) Provided by Eric Olson
It's a very old program and it's using a very old version of InstallShield (1999). It also seems to be running via the "iSetup.exe" program as well. The closest I can find is in the user temp folder (%temp%), I have the following files: _IsRes.dll, default.pal, isrt.dll, license.txt, setup.inx and value.shl.
The setupapi.h header defines SetupUninstallOEMInf as an alias which automatically selects the ANSI or Unicode version of this function based on the definition of the UNICODE preprocessor constant. Mixing usage of the encoding-neutral alias with code that not encoding-neutral can lead to mismatches that result in compilation or runtime errors. For more information, see Conventions for Function Prototypes.
This parameter allows the setup author to always clone the setup and run it from the temporary directory, even if the setup does not meet the conditions for running from the temporary directory. This parameter is ignored if the setup is a self-extracting executable file (.exe).
2ff7e9595c
コメント