Include Setup.dll in your .Cab File (Compact 7)

3/12/2014

When you create a cabinet (.cab) file, you can choose to add an optional Setup.dll file. This enables you to perform operations before and after the installation and unistallation of your application on target devices.

The following table lists functions that the Setup.dll file exports.

Function Description

Install_Init

Called before installing an application.

This function can be used to check for dependent files or applications.

Install_Exit

Called after installation process completes.

This function can be used to handle errors that occur during installation or to create shortcuts to the application.

Uninstall_Init

Called before removing an application.

This function can be used to close a running application before removal begins.

Uninstall_Exit

Called after removal process completes.

This function can be used to save database information to a file and delete the database, to tell the customer where data files reside, or to explain to the user how to reinstall the application.

If you are using CAB Wizard to create your .cab file, you specify your Setup.dll in the DefaultInstall section of your .inf file. The following example shows how you can use the CESetupDLL directive in the DefaultInstall section of the .inf file to point to a custom Setup.dll file.

[DefaultInstall.SA]
CESetupDLL = custom_setup.dll

For more information, see DefaultInstall.

To determine the function prototypes and return values that you must use for the functions in your Setup.dll file, examine the Ce_setup.h header file.

To create a setup DLL

  1. Make sure that Solution Explorer for your project is visible. On the File menu, point to Add, and then click New Project.

  2. In the project types list, click Visual C++ and then Smart Device. In the template list, click Win32 Smart Device DLL. Enter a name for the new project and click OK.

  3. On the Platforms page of the ATL Smart Device Project Wizard, select the platforms your application will support. On the Application Settings page, under Application Type, choose DLL. Click Finish.

  4. In Solution Explorer, expand your setup DLL project and then the Source Files folder. Right-click the <your project name>.cpp icon and select View Code.

  5. Add the following line after the existing #include statements at the top of the file to include the setup DLL function definitions.

    #include "ce_setup.h"
    
  6. Implement the functions of your choice at the end of the file.

    To implement all four functions, use the code template below:

    codeINSTALL_INIT
    Install_Init(
        HWND        hwndParent,
        BOOL        fFirstCall,     // is this the first time this function is being called?
        BOOL        fPreviouslyInstalled,
        LPCTSTR     pszInstallDir
    )
    {
    // TODO: Add custom installation code here
    
    // To continue installation, return codeINSTALL_INIT_CONTINUE
    // If you want to cancel installation, 
    // return codeINSTALL_EXIT_UNINSTALL
    return codeINSTALL_INIT_CONTINUE;
    
    }
    
    codeINSTALL_EXIT
    Install_Exit(
        HWND    hwndParent,
        LPCTSTR pszInstallDir,
        WORD    cFailedDirs,
        WORD    cFailedFiles,
        WORD    cFailedRegKeys,
        WORD    cFailedRegVals,
        WORD    cFailedShortcuts
    )
    {
    // TODO: Add custom installation code here
    
    // To exit the installation DLL normally, 
    // return codeINSTALL_EXIT_DONE
    // To unistall the application after the function exits,
    // return codeINSTALL_EXIT_UNINSTALL
    return codeINSTALL_EXIT_DONE;
    }
    
    codeUNINSTALL_INIT
    Uninstall_Init(
        HWND        hwndParent,
        LPCTSTR     pszInstallDir
    )
    {
    // TODO: Add custom uninstallation code here
    
    // To continue uninstallation, return codeUNINSTALL_INIT_CONTINUE
    // If you want to cancel installation,
    // return codeUNINSTALL_INIT_CANCEL
    return codeUNINSTALL_INIT_CONTINUE;
    }
    
    codeUNINSTALL_EXIT
    Uninstall_Exit(
        HWND    hwndParent
    )
    {
    // TODO: Add custom uninstallation code here
    
    return codeUNINSTALL_EXIT_DONE;
    }
    
  7. Add custom installation and uninstallation code to the methods. If you replace the contents of the Install_Exit method with the following code, the setup DLL will attempt to open a file and write to it. If the file cannot be opened or written to, the method returns codeINSTALL_EXIT_UNINSTALL, and your application will automatically be uninstalled from the device.

    HANDLE h=NULL;
    h=CreateFile(_T("\\installtest.txt"),GENERIC_WRITE,0,NULL,
                   CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL);
    
    if(h==NULL || WriteFile(h,_T("tost"),8,NULL,NULL) == false)
    {
       // File creation or writing failed, unistall application
    CloseHandle(h);
    return codeINSTALL_EXIT_UNINSTALL;
    }
    
    // File creation and writing succeded
    CloseHandle(h);
    return codeINSTALL_EXIT_DONE;
    

To include your setup DLL in a cab file

  1. If you already have a Smart Device CAB Project in your solution, skip to step 4.

  2. Make sure that Solution Explorer for your project is visible. On the File menu, point to Add, and then click New Project.

  3. In the project types list, click Other Project Types and then Setup and Deployment. In the template list, click Smart Device CAB Project. Enter a name for the new project, make sure Add to Existing Solution is selected and click OK.

  4. Add any files and assemblies that should be installed with your application to the CAB file.

  5. In the Properties window for the Smart Device CAB Project, from the CE Setup DLL drop-down list, select Browse….

  6. In the Select Item in Project dialog box, choose either Application Folder or Program Files Folder from the Look-in drop-down list.

  7. Click the Add Output button.

  8. In the Add Project Output Group dialog box, choose your setup DLL project from the Project drop-down list and then select Primary Output.

  9. Hit Ctrl+Shift+B to build the entire solution.

See Also

Reference

CAB Wizard