Hi,

I have a specific requirement. I am using a wix project and here I have a 
dialog box asking for the web application name and port number. After entering 
something when the user clicks on the next button I want to validate that the 
port number should not be used by some other application and if it does the 
setup should show a warning message to the user and asks him to enter a new 
port.

I have created the wix project and the validation part is done through C# 
project. I have created the C# project for custom actions project and 
associated it with the wix project. The main problem that I am facing is that 
now the installer get crashed when the user clicked the next button. I am not 
sure where is the problem?

Here is the code for the dialog box that is calling the custom actions dll

    <?xml version="1.0" encoding="UTF-8"?>
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi";>
     <Fragment>
    <UI>
      <Dialog Id="SharePointWebAppPortDlg" Width="382" Height="270" 
Title="!(loc.ProductDlgTitle)" CustomPalette="yes">

        <Control Id="Text18" Type="Text" X="13" Y="9" Width="201" Height="13" 
Text="!(loc.SharepointWebAppPortInfo)" TabSkip="no" Transparent="yes" />
        <Control Id="Text19" Type="Text" X="13" Y="21" Width="233" Height="25" 
Text="!(loc.FollowingInfoUsedToConfigureWebApplicationAndPort)" TabSkip="no" 
Transparent="yes" />
        <Control Id="Bitmap23" Type="Bitmap" X="0" Y="0" Width="382" 
Height="45" Text="WixUI_Bmp_Banner" TabSkip="yes" Disabled="yes" />
        <Control Id="Line7" Type="Line" X="0" Y="234" Width="382" Height="1" 
TabSkip="yes" Disabled="yes" />

        <Control Id="TextSharepointWebApplicationInfo" Type="Text" X="35" 
Y="63" Width="320" Height="70" Text="!(loc.SharepointWebApplicationInfo)" 
TabSkip="no" Transparent="yes" />
        <Control Id="TextWebApplicationName" Type="Text" X="35" Y="123" 
Width="110" Height="14" Text="!(loc.SharePointWebApplicationName)" 
RightAligned="yes" TabSkip="no" />
        <Control Id="EditWebApplicationName" Type="Edit" X="150" Y="120" 
Width="150" Height="15" Text="\0" Property="MTK_SHAREPOINT_WEB_APPLICATION" 
TabSkip="no" ToolTip="!(loc.SharePointWebApplicationNameHelp)" />

        <Control Id="TextPortNumber" Type="Text" X="35" Y="143" Width="100" 
Height="14" Text="!(loc.PortNumber)" RightAligned="yes" TabSkip="no" />
        <Control Id="EditPortNumber" Type="Edit" X="150" Y="140" Width="150" 
Height="15" Text="\0" Property="MTK_SHAREPOINT_PORT" TabSkip="no" 
ToolTip="!(loc.SharePointPortHelp)" />

        <Control Id="Back" Type="PushButton" X="189" Y="244" Width="56" 
Height="17" Text="!(loc.WixUIBack)" TabSkip="no" />
        <Control Id="Next" Type="PushButton" X="244" Y="244" Width="56" 
Height="17" Text="!(loc.WixUINext)" TabSkip="no" Default="yes">
          <!-- Verify the web application name and port number address -->



          <Publish Property="IdentifierRegExPattern" 
Value="[IdentifierWebApplicationNamePattern]">1</Publish>
          <Publish Property="Identifier" 
Value="[MTK_SHAREPOINT_WEB_APPLICATION]">1</Publish>
          <Publish Event="DoAction" 
Value="ValidateSharePointWebApplicationName">1</Publish>
          <Publish Property="IsValidWebApplicationName" 
Value="[IdentifierValid]">1</Publish>
          <Publish Event="SpawnDialog" 
Value="InvalidWebApplictionNameDlg">IsValidWebApplicationName=0</Publish>

          <Publish Property="IdentifierRegExPattern" 
Value="[IdentifierPortNumberPattern]">1</Publish>
          <Publish Property="Identifier" 
Value="[MTK_SHAREPOINT_PORT]">1</Publish>
          <Publish Event="DoAction" Value="ValidatePortNumber">1</Publish>
          <Publish Property="IsValidPortNumber" 
Value="[IdentifierValid]">1</Publish>
          <Publish Event="SpawnDialog" 
Value="InvalidPortNumberDlg">IsValidPortNumber=0</Publish>

          **<Publish Event="DoAction" Value="PortAvailabilityCheck">1</Publish>
          <Publish Property="WebAppExists" Value="[IdentifierValid]">1</Publish>
          <Publish Event="SpawnDialog" 
Value="InvalidPortNumberDlg">WebAppExists=0</Publish>**

        </Control>
        <Control Id="Cancel" Type="PushButton" X="309" Y="244" Width="56" 
Height="17" Text="!(loc.WixUICancel)" TabSkip="no" Cancel="yes">
          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
        </Control>
      </Dialog>
    </UI>

    <!--
    * Checks for a valid string identifier.
    * Identifier: The identifier to validate
    * IdentifierRegExPattern: The identifier to validate
    * out property: IdentifierValid: 0 means the string is not valid; otherwise 
1
    -->
    <Property Id="IsValidWebApplicationName" Value="1" Hidden="yes" />
    <Property 
Id="IdentifierWebApplicationNamePattern">!(loc.IdentifierWebApplicationNamePattern)</Property>
    <CustomAction Id="ValidateSharePointWebApplicationName" BinaryKey="ca.dll" 
DllEntry="IsValidString" />

    <Property Id="IsValidPortNumber" Value="1" Hidden="yes" />
    <Property 
Id="IdentifierPortNumberPattern">!(loc.IdentifierPortNumberPattern)</Property>
    <CustomAction Id="ValidatePortNumber" BinaryKey="ca.dll" 
DllEntry="IsValidString" />

    **<Property Id="WebAppExists" Value="1" Hidden="yes" />
    <CustomAction Id="PortAvailabilityCheck" 
BinaryKey="WIX.IIS.Management.CA.dll" DllEntry="CheckIfPortAvailable" />**

    </Fragment>
    </Wix>

The code for the custom actions project is something like this:

    using System;
    using System.Collections.Generic;
    using Microsoft.Deployment.WindowsInstaller;

    namespace WIX.IIS.Management
    {
    public class PortAvailabilityCheck
    {
        [CustomAction]
        public static ActionResult CheckIfPortAvailable(Session session)
        {
            try
            {
                session.Log("Begin PortAvailabilityCheck.CheckIfPortAvailable");

                string host = session["MTK_SHAREPOINT_WEB_APPLICATION"];
                string port = session["MTK_SHAREPOINT_PORT"];

                if(String.IsNullOrEmpty(host))
                    throw new 
ArgumentException("session[MTK_SHAREPOINT_WEB_APPLICATION] cannot be null or 
empty");

                if(String.IsNullOrEmpty(port))
                    throw new ArgumentException("session[MTK_SHAREPOINT_PORT] 
cannot be null or empty");

                List<WebSiteInfo> websites = 
IISHelper.GetListOfDirectories(host, String.Empty, IISHelper.IISVirsion.IIS6);

                bool portOccupied = false;

                foreach (WebSiteInfo wsi in websites)
                {
                    if (String.Compare(wsi.PortNo.ToString(), port, 
StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        portOccupied = true;
                        break;
                    }
                }

                if (!portOccupied)
                    return ActionResult.Success;
                else
                    return ActionResult.Failure;
            }
            catch (Exception ex)
            {
                session.Log("Exception 
PortAvailabilityCheck.CheckIfPortAvailable - {0}", ex.Message);
                return ActionResult.Failure;
            }
        }
    }
    }


There is a seperate file for loading these DLLs in the project. The code for 
that file is :

    <?xml version="1.0" encoding="UTF-8"?>
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi";>
                <Fragment>
    <Binary Id="PropertyLoader.dll" SourceFile="..\..\SharedBinaries\Deployment 
Infrastructure\CustomActions\PropertyLoader.dll" />
    <Binary Id="ca.dll" SourceFile="..\..\SharedBinaries\Deployment 
Infrastructure\CustomActions\ca.dll" />
    **<Binary Id="WIX.IIS.Management.CA.dll" 
SourceFile="..\..\SharedBinaries\Deployment 
Infrastructure\CustomActions\WIX.IIS.Management.CA.dll" />**
    <Binary Id="WixUI_Bmp_Banner" SourceFile="Bitmaps\bannrbmp.bmp" />
    <Binary Id="WixUI_Bmp_New" SourceFile="Bitmaps\New.ico" />
    <Binary Id="WixUI_Bmp_Up" SourceFile="Bitmaps\Up.ico" />
    <Binary Id="WixUI_Ico_Info" SourceFile="Bitmaps\Info.ico" />
                </Fragment>
    </Wix>


The code written in bold or enclosed in ** Code ** is the main thing. I have 
associated all for your reference.

I don't know what the issue is and where I am wrong?

Any help is highly appreciated.

Thanks,
Vijay

________________________________
READER BEWARE: Unencrypted, unsigned Internet e-mail is inherently insecure.

Internet messages may be corrupted, incomplete, misdirected or may
incorrectly identify the sender. Therefore, nothing in this message or
attachments may be considered legally binding.

THIS MESSAGE IS ONLY INTENDED FOR THE USE OF THE INDIVIDUAL
OR ENTITY TO WHICH IT IS ADDRESSED AND MAY BE PRIVILEGED.

If you are not the intended recipient or their authorized agent, you
may not forward or copy this information and must delete or destroy all
copies of this message and attachments received.

If you have received this communication in error, please notify
Matrikon Inc. by telephone at (780) 448-1010 or emailing ad...@matrikon.com.
------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to