This website uses cookies. By clicking OK, you consent to the use of cookies. Click Here to learn more about how we use cookies.
Turn on suggestions
Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.
DonAIR
Occasional contributor
Sep 17, 2020
08:39 AM
Our service packs use InstallScript projects. We execute the following InstallScript to run sql scripts: sFileName= PROGRAMFILES64 ^ "AIR\\Installer\\SqlScriptExecute.bat";
sMsg = "Please wait while setup runs the upgrade scripts";
SdShowMsg ( sMsg, TRUE);
LaunchAppAndWait (sFileName, sSQLServer, WAIT | LAAW_OPTION_HIDDEN);
SdShowMsg ( sMsg, FALSE);
if (LAAW_PARAMETERS.nLaunchResult = 0) then
else
MessageBox("A script failed to execute, please go to Program Files\\AIR\\Logs to check the AIR.ApplySqlUpdate.txt file for more details.", WARNING);
endif; This code works to report errors back with a single layer, as in: 1. the batch file calls a powershell to execute scripts. We have since added a new layer to it so it can recursively check multiple folders and do the same, so now the method is: 1. batch file executes powershell 2. powershell executes numerous powershells that execute scripts. By adding the new layer the installscript isn't capturing errors anymore. If we do the process outside of installscript it works fine, so we know the lack of error reporting isn't coming from the batch file, powershell 1 or powershell 2. Do we need to do something else to get it to capture the error code back to installshield or is the dual layer just an issue for installshield? Below is the Batch file: powershell -NoProfile -ExecutionPolicy Bypass -Command "& '%~dp0\SqlScriptExecute.ps1' -IServerInstance %1 -verbose"
EXIT /B %ERRORLEVEL% Below is the Powershell that loops: #Gets the ServerInstance that is getting based from the Bat file Argument to pass to the loop
param(
[parameter(Mandatory = $true)]
[string] $IServerInstance
)
#Gets the list of all of the paths that have the AIR.ApplySqlUpdate.ps1 file.
$FolderList=Get-ChildItem -Path $PSScriptRoot -Filter "AIR.ApplySqlUpdate.ps1" -Recurse | %{$_.Directory}
#Loops through the list of paths and executes the PS1 file.
$FolderList | ForEach-Object {Push-Location $_
try{
Invoke-Expression -Command "& '$_\AIR.ApplySqlUpdate.ps1' -ServerInstance '$IServerInstance' -verbose -LogDirectory '**PROGRAMFILES**AIR\Logs'"
}
catch{
throw
}
Pop-Location
}
... View more
Labels
Oct 22, 2019
08:58 AM
I am trying to enable/disable features using this in a Custom Action: SuiteSetProperty("NA_Hurricane_TropicalCyclone","True"); I then have a property on the Feature itself that if that property is set to "True" On the InstallationFeatures Page Entered event, I run the custom action. I see in the Suite log it gets set to True as it should but the dialog screen still has it turned off. I am hoping this is an order of operations thing or maybe their is a better way to manipulate the InstallationFeatures screen prior to loading?
... View more
Labels
Oct 18, 2019
12:31 PM
Is their a way to enable/disable a feature via powershell or installscript for Suite installers?
... View more
Labels
Oct 18, 2019
08:20 AM
@MarkusLatz priceless, I am a dolt. So essentially all my code worked wonderfully, but I was trying to delete a key that had already been removed and then OnEnd is called at the end and adding it back. haha. Thank you again!
... View more
Oct 16, 2019
01:38 PM
@MarkusLatz , so i added more code around it for debugging and it seems the keys aren't found... maybe something is broke in OnMaintUIBefore? I tried the following key and its failing (a key that should exist in both Wow6432 and non. // Set the root key.
RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
// Set the name of the subkey.
szSubKey = "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
szValue = "EstimatedSize";
if (RegDBKeyExist (szSubKey) < 0) then
// Delete the subkey.
nReturn2 = RegDBDeleteValue (szSubKey, szValue);
// Report the results of the deletion.
if (nReturn2 < 0) then
MessageBox ("RegDBDeleteValue failed.", SEVERE);
else
SprintfBox (INFORMATION, "Blah", "%s successfully deleted.", szValue);
endif;
else
MessageBox("Key not found: "+szSubKey, WARNING);
endif;
... View more
Oct 16, 2019
09:33 AM
oddly enough message boxes pop up where the delete code is, so its definitely reaching that code. and if that code is in OnUninstall it deletes the key.
... View more
Oct 16, 2019
07:42 AM
@MarkusLatz that is a great question, one of which I don't know haha. I assumed it was because i was using code to add the key so InstallShield wasn't smart enough to know to remove it by default? As for code in my project, the only lines of custom code are our own logging, here is my full .rul file. // Included header files ----------------------------------------------------
#include "ifx.h"
#include "define.h"
//---------------------------------------------------------------------------
// OnSetTARGETDIR
//---------------------------------------------------------------------------
function OnSetTARGETDIR()
number nId, nIgnore, nResult;
string sCMDLINE, szId, szTARGETDIR;
begin
// In maintenance mode the value of TARGETDIR is read from the log file.
if( MAINTENANCE ) then
return ISERR_SUCCESS;
endif;
// Set TARGETDIR to script default.
TARGETDIR = PROGRAMFILES64 ^ "AIR\\Models";
// Read TARGETDIR from the media.
nResult = MediaGetData( MEDIA, MEDIA_FIELD_TARGETDIR, nIgnore, szTARGETDIR );
// Use the TARGETDIR from the media if anything was read.
if( nResult >= ISERR_SUCCESS && StrLengthChars( szTARGETDIR ) ) then
TARGETDIR = szTARGETDIR;
endif;
// Customize the default TARGETDIR for multi-instance application.
// TODO: If you want something different customize the code below.
if( MAINT_OPTION = MAINT_OPTION_MULTI_INSTANCE && MULTI_INSTANCE_COUNT > 0) then
// Start with the current multi-instance count plus one.
nId = MULTI_INSTANCE_COUNT + 1;
// Find a unique TARGETDIR.
while( ExistsDir( TARGETDIR ) = EXISTS )
// Convert to string.
NumToStr( szId, nId );
// Update IFX_MULTI_INSTANCE_SUFFIX
IFX_MULTI_INSTANCE_SUFFIX = "_" + szId;
// Update TARGETDIR
TARGETDIR = TARGETDIR + IFX_MULTI_INSTANCE_SUFFIX;
// Update nId
nId = nId + 1;
endwhile;
endif;
//Change TARGETDIR to CMDLINE from Suite Package
sCMDLINE = CMDLINE;
StrReplace (sCMDLINE, " ISFeatureInstall=ALL", "", 0);
TARGETDIR = sCMDLINE;
end;
//---------------------------------------------------------------------------
// OnBegin
//---------------------------------------------------------------------------
function OnBegin()
NUMBER nResult;
begin
//Hide the Computer Icon
DialogSetInfo (DLG_INFO_ALTIMAGE, "", TRUE);
// Get date and time for log name
GetSystemInfo (DATE, nResult, sDate);
StrReplace(sDate, "-", "", 0);
GetSystemInfo (TIME, nResult, sTime);
StrReplace(sTime, ":", "", 0);
// Create the installer log file - stored in Logging.rul
LogCreateFile();
GetSystemInfo (DATE, nResult, sDate);
StrReplace(sDate, "-", "/", 0);
GetSystemInfo (TIME, nResult, sTime);
LogCreateText(sInstallLog, "OnFirstUIBefore() | Start Time: "+sDate+" "+sTime, 0, AFTER);
end;
//---------------------------------------------------------------------------
// OnFirstUIBefore
//---------------------------------------------------------------------------
function OnFirstUIBefore()
number nResult, nLevel, nSize, nSetupType;
string szTitle, szMsg, szOpt1, szOpt2, szLicenseFile;
string szName, szCompany, szTargetPath, szDir, szFeatures;
BOOL bLicenseAccepted;
begin
// Added in InstallShield 15 - Show an appropriate error message if
// -removeonly is specified and the product is not installed.
if( REMOVEONLY ) then
Disable( DIALOGCACHE );
szMsg = SdLoadString( IDS_IFX_ERROR_PRODUCT_NOT_INSTALLED_UNINST );
SdSubstituteProductInfo( szMsg );
MessageBox( szMsg, SEVERE );
abort;
endif;
nSetupType = COMPLETE;
szDir = PROGRAMFILES64 ^ "AIR\\Models";
bLicenseAccepted = FALSE;
// Create a list for system information.
LogCreateText(sInstallLog, "OnFirstUIBefore() | Product Name: "+IFX_PRODUCT_NAME, 0, AFTER);
LogCreateText(sInstallLog, "OnFirstUIBefore() | Product Version: "+IFX_PRODUCT_VERSION, 0, AFTER);
LogCreateText(sInstallLog, "OnFirstUIBefore() | Package location: "+SRCDIR, 0, AFTER);
// Beginning of UI Sequence
Dlg_Start:
nResult = 0;
Dlg_SdWelcome:
szTitle = "";
szMsg = "";
//{{IS_SCRIPT_TAG(Dlg_SdWelcome)
nResult = SdWelcome( szTitle, szMsg );
//}}IS_SCRIPT_TAG(Dlg_SdWelcome)
if (nResult = BACK) goto Dlg_Start;
Dlg_AskDestPath:
nResult = SdAskDestPath ("", "", szDir, 0);
if (nResult = BACK) goto Dlg_SdWelcome;
TARGETDIR = szDir;
StrRemoveLastSlash (szDir);
LogCreateText(sInstallLog, "OnFirstUIBefore() | Installation Directory: "+TARGETDIR, 0, AFTER);
// Added in 11.0 - Set appropriate StatusEx static text.
SetStatusExStaticText( SdLoadString( IDS_IFX_STATUSEX_STATICTEXT_FIRSTUI ) );
return 0;
end;
//---------------------------------------------------------------------------
// OnInstalledFile
//---------------------------------------------------------------------------
function OnInstalledFile(szFile)
begin
LogCreateText(sInstallLog, "OnInstalledFile() | File Copied: "+szFile, 0, AFTER);
end;
//---------------------------------------------------------------------------
// OnFirstUIAfter
//---------------------------------------------------------------------------
function OnFirstUIAfter()
STRING szTitle, szMsg1, szMsg2, szOpt1, szOpt2;
NUMBER bvOpt1, bvOpt2, nResult;
begin
ShowObjWizardPages(NEXT);
szTitle = "";
szMsg1 = "";
szMsg2 = "";
szOpt1 = "";
szOpt2 = "";
bvOpt1 = FALSE;
bvOpt2 = FALSE;
// Get date and time for log name
GetSystemInfo (DATE, nResult, sDate);
StrReplace(sDate, "-", "/", 0);
GetSystemInfo (TIME, nResult, sTime);
//{{IS_SCRIPT_TAG(Dlg_SdDinishEx)
if ( BATCH_INSTALL ) then
SdFinishReboot ( szTitle , szMsg1 , SYS_BOOTMACHINE , szMsg2 , 0 );
else
SdFinish ( szTitle , szMsg1 , szMsg2 , szOpt1 , szOpt2 , bvOpt1 , bvOpt2 );
endif;
//}}IS_SCRIPT_TAG(Dlg_SdDinishEx)
LogCreateText(sInstallLog, "OnFirstUIAfter() | Finish Time: "+sDate+" "+sTime, 0, AFTER);
end;
//---------------------------------------------------------------------------
// OnEnd
//---------------------------------------------------------------------------
function OnEnd()
begin
//Set the Install Size in Programs and Features (in KB)
RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
RegDBSetKeyValueEx ("SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"+PRODUCT_GUID, "EstimatedSize", REGDB_NUMBER, SIZE_INSTALLED, -1 );
end;
//---------------------------------------------------------------------------
// OnUninstall
//---------------------------------------------------------------------------
function OnUninstall()
string sKey, szIgnore, szMsg;
number nResult;
BOOL bOpt1, bOpt2;
begin
// Hide the initial progress dialog.
Disable( DIALOGCACHE );
// Added in InstallShield 15 - Show an appropriate error message if
// -uninst is specified and the product is not installed.
if( !MAINTENANCE ) then
szMsg = SdLoadString( IDS_IFX_ERROR_PRODUCT_NOT_INSTALLED_UNINST );
SdSubstituteProductInfo( szMsg );
MessageBox( szMsg, SEVERE );
abort;
endif;
// Show Uninstall Confirmation Dialog
if( MessageBox( SdLoadString( IFX_MAINTUI_MSG ), MB_YESNO ) != IDYES ) then
abort;
endif;
//Cleanup Key we created to manipulate sizing
RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
RegDBDeleteValue("SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"+PRODUCT_GUID,"EstimatedSize");
// Remove all features.
FeatureRemoveAllInMediaAndLog();
// Added in 11.0, disable the cancel button during uninstall.
if( REMOVEALLMODE ) then
Disable( CANCELBUTTON );
endif;
// Added in 11.0 - Set appropriate StatusEx static text.
// Moved in 12.1 - Set before calling Enable( STATUSEX ) to ensure proper product name updating.
SetStatusExStaticText( SdLoadString( IDS_IFX_STATUSEX_STATICTEXT_MAINTUI_REMOVEALL ) );
// Show Status
SetStatusWindow( 0, "" );
Enable( STATUSEX );
StatusUpdate( ON, 100 );
// Uninstall
nResult = FeatureTransferData( MEDIA );
// Handle move data error and abort if error occured.
if( nResult < ISERR_SUCCESS ) then
OnComponentError();
abort;
endif;
// Disable Status
Disable( STATUSEX );
// Show final dialog.
if ( BATCH_INSTALL ) then
SdFinishReboot( SdLoadString(IFX_SDFINISH_REMOVE_TITLE), SdLoadString(IFX_SDFINISH_REMOVE_MSG2), SYS_BOOTMACHINE, "", 0 );
else
SdFinish( SdLoadString(IFX_SDFINISH_REMOVE_TITLE), SdLoadString(IFX_SDFINISH_REMOVE_MSG1), "", "" , "", bOpt1 , bOpt2 );
endif;
end;
//---------------------------------------------------------------------------
// OnMaintUIBefore
//---------------------------------------------------------------------------
function OnMaintUIBefore()
number nResult, nType;
string szTitle, szMsg;
begin
// nType defaults to MODIFY.
nType = MODIFY;
//Initialize SQL
OnSQLServerInitializeMaint();
// Beginning of UI Sequence
Dlg_Start:
// Added in Version 9.5 - Support for REMOVEONLY option.
if( !REMOVEONLY ) then
// In standard mode show maintenance dialog
Disable( BACKBUTTON );
nType = SdWelcomeMaint( szTitle, szMsg, nType );
Enable( BACKBUTTON );
nResult = NEXT;
else
// Hide the initial progress dialog as otherwise the user can
// click on it, and hide the MessageBox.
Disable( DIALOGCACHE );
// In RemoveOnly mode, set to remove.
nType = REMOVEALL;
endif;
// Show Uninstall Confirmation Dialog
if ( nType = REMOVEALL ) then
nResult = MessageBox( SdLoadString( IFX_MAINTUI_MSG ), MB_YESNO );
if (nResult != IDYES ) then
if( REMOVEONLY ) then
// In REMOVEONLY mode, abort the setup.
abort;
else
// In non-REMOVEONLY mode, redisplay the previous dialog.
goto Dlg_Start;
endif;
endif;
endif;
Dlg_SdFeatureTree:
if ( nType = MODIFY ) then
szTitle = "";
szMsg = SdLoadString( SD_STR_COMPONENT_MAINT_MSG );
nResult = SdFeatureTree( szTitle, szMsg, TARGETDIR, "", -1 );
if ( nResult = BACK ) goto Dlg_Start;
endif;
Dlg_ObjDialogs:
nResult = ShowObjWizardPages( nResult );
if ( ( nResult = BACK ) && ( nType != MODIFY ) ) goto Dlg_Start;
if ( ( nResult = BACK ) && ( nType = MODIFY ) ) goto Dlg_SdFeatureTree;
switch(nType)
case REMOVEALL:
// Ensure that all previously installed features are removed.
FeatureRemoveAllInMediaAndLog();
// Added in 11.0 - Set appropriate StatusEx static text.
SetStatusExStaticText( SdLoadString( IDS_IFX_STATUSEX_STATICTEXT_MAINTUI_REMOVEALL ) );
case REPAIR:
// Changed for DevStudio 9, Disk1 files are now always updated when installed
// so when running from ADDREMOVE we need to prevent these files from being
// updated since this will result in files being updated that are locked by the setup.
// Updating these files when running from ADDREMOVE should not be needed since updates
// are not run directly from Add/Remove.
if( ADDREMOVE ) then
// Reinstall all previously installed features, except
// disk1 features.
FeatureUpdate( "" );
else
// Reinstall all previously installed features.
FeatureReinstall();
endif;
// Added in 11.0 - Set appropriate StatusEx static text.
SetStatusExStaticText( SdLoadString( IDS_IFX_STATUSEX_STATICTEXT_MAINTUI_REPAIR ) );
case MODIFY:
// Added in 11.0 - Set appropriate StatusEx static text.
SetStatusExStaticText( SdLoadString( IDS_IFX_STATUSEX_STATICTEXT_MAINTUI_MODIFY ) );
endswitch;
if ( nType = REMOVEALL ) then
//Cleanup Key we created to manipulate sizing
RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
RegDBDeleteValue("SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"+PRODUCT_GUID,"EstimatedSize");
endif;
end;
... View more
Oct 15, 2019
09:36 AM
OnEnd I run the following in my InstallScript package to make it so Add/Remove programs gets a size column: RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
RegDBSetKeyValueEx ("SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"+PRODUCT_GUID, "EstimatedSize", REGDB_NUMBER, "142606336", -1 ); I noticed that when I uninstall the product the key remains. So I tried adding this: RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
RegDBDeleteValue("SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"+PRODUCT_GUID,"EstimatedSize"); The code works in OnUninstall (when I pass a -uninst) to the command line, but when I add it to OnFirstMaintUIBefore or OnFirstMaintUIAfter it doesn't get executed, so it doesn't work if you just use Add/Remove programs. Anything special I can do to get this to work? Is my code just in the wrong function?
... View more
Labels
Oct 11, 2019
10:18 AM
ya im an idiot haha, caught it right after posting it. Now I just need a way to strip out the characters from CMDLINE and im golden as cmdline returns: [PROPERTY] ISFeatureInstall=ALL so for example in my case: C:\Program Files\AIR\Models ISFeatureInstall=ALL when I just want C:\Program Files\AIR\Models
... View more
Oct 11, 2019
09:43 AM
@MarkusLatz , thanks again, so shouldn't it just be as simple as this in my OnFirstUIBefore? TARGETDIR = CMDLINE; and in the suite set command line and silent command line to my Property, which is [INSTALLPATH] (fyi i was testing with InstallScript in this case not setup.exe)? its not taking the effect for some reason. I will keep playing with it.
... View more
Oct 10, 2019
01:10 PM
we are using setup.exe now. we currently do this: Setup.exe /s /f1"[SETUPSUPPORTDIR]\Model_01_Install.iss" and we are running Powershell (thanks to your help) to update the Model_01_Install.iss file prior to execution. But if we can just take the property from the Suite and pass it directly to the command line that would be much better.
... View more
Oct 10, 2019
09:11 AM
@MarkusLatz , I would definitely prefer doing it correctly via your second method, thank you the first method worked. My understanding from InstallShield themselves is I can not do it though: https://community.flexera.com/t5/InstallShield-Forum/Passing-Properties-in-Suite-installers-to-packages/m-p/114720#M66721 Would I not even need to use .iss files either? What does your command line look like? All I need to do is install InstallScript packages silently but need to pass a install directory to them.
... View more
Oct 10, 2019
07:44 AM
I am wondering how to get custom/inbuilt properties from a Suite Installer via a PowerShell Action? I am trying to modify the Installation Directory of InstallScript projects and since you can't pass variables to setup.exe's I thought I would edit the response files prior to installation of the packages. The PowerShell I am using is: $installpath = get-property -name INSTALLPATH
$isspath = get-property -name SETUPSUPPORTDIR
((Get-Content -path "$isspath\Model_01_Install.iss" -Raw) -replace 'INSTALLATION_PATH',$installpath) | Set-Content -Path "$isspath\Model_01_Install.iss" INSTALLPATH is a custom property and SETUPSUPPORTDIR is a built in one. Via the UI I see the PowerShell runs but it does nothing, so either its not running or the variables are bad and the PowerShell is failing. If I run it outside of InstallShield with hard-coded values it works fine. I have it set to deploy during OnPackagesConfiguring, with no condition and have tried both Admin/No admin privileges. I guess I am looking for help with either getting a powershell to run or how to pass properties to powershell.
... View more
Labels
Sep 09, 2019
09:36 AM
@Jenifer thank you for the info but still no luck. Still doesn't use the property at all. I tried it with and without the \.
... View more
Sep 09, 2019
08:52 AM
Probably and easy question but I am having a hell of a time passing properties from my Suite installer to my InstallScript packages. I set a variable in the Wizard for installation path (INSTALLDIR). I set the following, but I must be doing something wrong, any help would be appreciated, completely new to Suite installers and their is very little out there on YouTube about it.
... View more
Labels
Latest posts by DonAIR
Subject | Views | Posted |
---|---|---|
129 | Sep 17, 2020 08:39 AM | |
253 | Oct 22, 2019 08:58 AM | |
410 | Oct 18, 2019 12:31 PM | |
1246 | Oct 18, 2019 08:20 AM | |
1275 | Oct 16, 2019 01:38 PM | |
1279 | Oct 16, 2019 09:33 AM | |
1283 | Oct 16, 2019 07:42 AM | |
1296 | Oct 15, 2019 09:36 AM | |
1153 | Oct 11, 2019 10:18 AM | |
1158 | Oct 11, 2019 09:43 AM |
Activity Feed
- Posted Powershell Report Error Back to Installscript not working? on InstallShield Forum. Sep 17, 2020 08:39 AM
- Posted Suite Packaging InstallScript Action to Enable/Disable Features on InstallShield Forum. Oct 22, 2019 08:58 AM
- Posted Enable/Disable Features via PowerShell or InstallScript for Suite Installer? on InstallShield Forum. Oct 18, 2019 12:31 PM
- Posted Re: Uninstall Related Registry Deletion Question - InstallScript on InstallShield Forum. Oct 18, 2019 08:20 AM
- Posted Re: Uninstall Related Registry Deletion Question - InstallScript on InstallShield Forum. Oct 16, 2019 01:38 PM
- Posted Re: Uninstall Related Registry Deletion Question - InstallScript on InstallShield Forum. Oct 16, 2019 09:33 AM
- Posted Re: Uninstall Related Registry Deletion Question - InstallScript on InstallShield Forum. Oct 16, 2019 07:42 AM
- Posted Uninstall Related Registry Deletion Question - InstallScript on InstallShield Forum. Oct 15, 2019 09:36 AM
- Kudoed Re: Suite Installers passing properties to Actions? for MarkusLatz. Oct 11, 2019 10:19 AM
- Posted Re: Suite Installers passing properties to Actions? on InstallShield Forum. Oct 11, 2019 10:18 AM
- Posted Re: Suite Installers passing properties to Actions? on InstallShield Forum. Oct 11, 2019 09:43 AM
- Posted Re: Suite Installers passing properties to Actions? on InstallShield Forum. Oct 10, 2019 01:10 PM
- Posted Re: Suite Installers passing properties to Actions? on InstallShield Forum. Oct 10, 2019 09:11 AM
- Posted Suite Installers passing properties to Actions? on InstallShield Forum. Oct 10, 2019 07:44 AM
- Got a Kudo for PowerShell Method to Copy MSI Log at end of Install. Sep 17, 2019 01:08 AM
- Posted Re: Passing Properties in Suite installers to packages on InstallShield Forum. Sep 09, 2019 09:36 AM
- Posted Passing Properties in Suite installers to packages on InstallShield Forum. Sep 09, 2019 08:52 AM
- Posted Component ordering in InstallScript on InstallShield Forum. Mar 08, 2019 08:23 AM
- Posted LaunchApplication/LaunchAppAndWait Issue on InstallShield Forum. Feb 25, 2019 11:22 AM
- Posted System Requirements for better Performance? on InstallShield Forum. Nov 05, 2018 02:18 PM
Contact Me
Online Status |
Offline
|
Date Last Visited |
Sep 17, 2020
02:15 PM
|