NAL Auto Verify Not Always Working.
(Last modified: 23Mar2004)
This document (10027944) is provided subject to the disclaimer at the end of this document.
Formerly TID 2942101
Novell ZENworks 1.1
NAL Auto Verify Not Always Working.
The auto verify feature of NAL 2.5 and 2.6 does not work in all situations.
Create a snapshot of WinZip and create an application object (AO) using the resulting AOT file. Using a user associated to the WinZip AO, launch the application from NAL Window. WinZip gets distributed, and since the "Path to executable" points to WINZIP32.EXE, WinZip run's after the distribution completes. Then delete WZ32.DLL from the C:\Program Files\WinZip directory, and try to run the WinZip AO again. The following error occurs:
WinZip Error loading C:\PROGRA~!\WinZip\WZ32.DLL
NAL should have used the auto verify feature to detect the missing DLL and prompt for an Auto Verify. However, notice the title of the error is WinZip
(the application), not NAL. To troubleshoot: Right-click on the WinZip AO and select 'Verify' to see if it heals the application and allows it to run.
The bottom line is that for NAL auto-verify to work, NAL has to be in control. That is, NAL has to be able to detect a failure when an application is run.
NAL auto-verify will not automatically verify the application object in the following cases:
1. The AO consists of a "path to executable" only (i.e., it just points to a network or local app that is already installed). In this case, if the executable specified in the "path to executable" is missing, NAL will auto verify the AO.
2. After the AO is installed, you run the application "natively" or outside of NAL.
3. If the application itself controls the loading of the DLLs, auto-verify will only work for the main executable (it won't work for other files, like missing DLLs), even if the application is installed and run from the same NAL AO. * For more details, see the technical explanation below.
With WinZip, auto-verify fails to detect a missing DLL, even if the application is installed and run from the same NAL AO. This is because of the way WinZip controls the loading of its DLLs. NAL does not have control and therefore cannot detect the failure. To ensure that key files (DLLs for example) are always present, use the Distribute Always option for those key files. For example, to prevent the error from occurring when WZ32.DLL is deleted, go to the Application Files tab of the WinZip AO, highlight WZ32.DLL and check the Distribute Always box. To prevent the file from being copied when it already exists, use the 'Copy if newer' option in the 'Item will' drop-down box. If the application is relatively small, you can set the entire application to 'Distribute Always' on the application object's Distribution tab. If you choose this option, you may want to disable the distribution progress splash screen by un-checking the 'Show distribution progress' check box.
*Technical Explanation for the third item above:
When making API calls into a DLL, the programmer has two ways of doing it:
1) One way is to link what is called an import library. By doing that, the compiler sets up the code to call into the DLL and the DLL is auto-loaded by Windows at the time the EXE is initially loaded into memory.
2) An alternative way is for the programmer to write the code to load the DLL (called Load Library) and get the function address of the APIs desired
using a function called GetProcAddress. If the programmer does that, the Windows loader has no idea what DLLs may or may not be loaded during the run of the program.
Therefore, NAL is only capable of detecting errors returned from the Windows loader and the loader can only detect missing DLLs that were linked in at compile time using an import library. As a result, auto verify will appear to work differently, depending on how an application loads its DLLs.
*Tip: If auto-verify fails, the user can always right-click on the NAL-delivered application and manually select the Verify option.
The Origin of this information may be internal or external to Novell. Novell makes all reasonable efforts to verify this information. However, the information provided in this document is for your information only. Novell makes no explicit or implied claims to the validity of this information.
Any trademarks referenced in this document are the property of their respective owners. Consult your product manuals for complete trademark information.