hi,

My requirement is

-> In case of Silent Install, when user give the command "msiexec /i abcdef.msi 
/q"
by default it installs in C drive.

If C drive doesn't have enough space, then my installer automatically selects 
another drive
which has space and should install there silently.

Following is the corresponding dll.

Here

-> for PATH am setting through custom action

-> First it checks default dir ie TARGETDIR ie "C:\"

_> If space is not avialble it will take another dir(through for loop) and 
checks space there.

->Once the space is ok it setts PATh to 
MsiSetProperty(hInstaller,"MYPROP",PATH);

UINT __stdcall DiskSpace(MSIHANDLE hInstaller)
{
        -----
        -----
        rc = MsiGetProperty(hInstaller, "PATH", &PATH[0], &PATHSize);    
    space = findDiskSpace(PATH); /*fn that checks space and checks with 
req_space and if it satisfies returns TRUE */
        if(space)
        {
                rc = MsiSetProperty(hInstaller,"MYPROP",PATH);
                if (rc != ERROR_SUCCESS) 
        {
            ::MessageBox(NULL, "MsiSetProperty(ProductId) failed.", "Error", 
MB_OK);
            return ERROR_INSTALL_FAILURE;
        }       
        -----
        -----
        return 0;       
}


Below is my wix code:

      <Directory Id='TARGETDIR' Name='SourceDir'>
         <Directory Id='ProgramFilesFolder' Name='PFiles'>
            <Directory Id='MyDir' Name='TestProg' LongName='Test Program'>
               <Component Id='MyComponent' 
Guid='12345678-1234-1234-1234-123456789012'>
                  <File Id='readme' Name='read.txt' LongName='readme.txt' 
DiskId='1' src='C:\readme.txt' Vital='yes' />
               </Component>               
            </Directory>
         </Directory>                   
      </Directory>
 
      <Feature Id='MyFeature' Title='My 1st Feature' Level='1'>
         <ComponentRef Id='MyComponent' />               
      </Feature>

     <InstallExecuteSequence>   
          <Custom Action="SetPATHValue" After="AppSearch" 
>SilentInstall</Custom>
          <Custom Action="DiskSp" 
Before="LaunchConditions">SilentInstall</Custom>      
      <Custom Action='DirectorySet' Before='LaunchConditions'>NOT TARGETDIR AND 
SilentInstall</Custom>            
    </InstallExecuteSequence>   
                
        <Binary Id="BinDiskSp" SourceFile="C:\SampleDLL.dll"></Binary>
        <CustomAction Id="DiskSp" BinaryKey="BinDiskSp" 
DllEntry="DiskSpace"></CustomAction>
        <CustomAction Id="SetPATHValue" Property="PATH" Value="[TARGETDIR]" />

       <CustomAction Id="DirectorySet" Property="TARGETDIR" 
Value="[MYPROP]"></CustomAction>    
        
        <Property Id="MsiLogging">voicewarmupx</Property>       
        <Property Id="SilentInstall">INSTALLUILEVEL_NONE</Property>     

Note: My C drive doesn't have enough space. So it will select D drive(From Dll)

When I execute msi in silent mode through it is installing in C drive only.


Any inputs where am wrong?


-------------------------------------------------------------------------
SF.Net email is sponsored by: The Future of Linux Business White Paper
from Novell.  From the desktop to the data center, Linux is going
mainstream.  Let it simplify your IT future.
http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to