Dec 18, 2012
11:27 AM
In an InstallScript project (both back at IS2011 and with the current version) I simply set the BATCH_INSTALL to signal a need for a reboot, and then I implement the OnReboot handler to call the functions that I need implemented after the reboot. A couple of caveats are that this only works in a project with full maintenance enabled in the project settings. Also if the code to be processed in OnReboot needs any information from the pre-reboot launch (dialog info or even Media states of features) you need to persist that information in OnEnd (to a file or the registry) and then recover the information in your OnReboot. Using this method the InstallShield engine creates the RunOnce keys for you. (To debug your method you could create a demo setup using this method and compare the registry key that InstallShield creates verses the one you are creating, but I would also guess that your call to the Win32 API is being tripped up by the WSTRING change in the prototype of the Win32 API.) For a non-maintenance project (for a Service pack), since it does not register with the OS (ARP) so it cannot launch the setup after a reboot. If doing a non-maintenance setup and you need to process code in OnReboot, then set the project to full Maintenance and have code the removes the ARP registration after either a normal (no-reboot) installation or after processing your OnReboot code. Also the IS debugger can be configured to attach to the OnReboot code, but I do not recall the details at this time. I think one needs to pass the -d flag to the args parameter of OnReboot (but that memory may be faulty). Sorry this is late, and I hope you found another solution, but maybe this will help someone. Phill
... View more
Jun 04, 2012
11:01 AM
As I recall, in each Beta test program there are a number of testers that ask for access to the Beta version of the SA builder, but it is not made availble. Maybe it is time to listen to this input. Phill
... View more
May 11, 2012
01:49 PM
Not to pile onto this thread, but my InstallScript project, which built correctly under IS2012 Spring Beta, has this same problem and will not build. The message says that it failed to sign and that there was an automation error. SignSwid.exe is not in the 2012 Spring system folder. Based on this thread I moved SignSwid.exe from my IS2012 Win 7 x64 VM to my IS2012 Spring Win7 x64 VM. I had to close and re-open the IDE, and then my project builds. Also my project does not have any signing signature specified. For reference, I tried to 'update' IS2012 Spring Beta to IS2012 Spring by providing the serial number as indicated in the email order, but when it kept reporting that it was a 'trial' version, I uninstalled IS2012 Spring Beta and did a full download of IS2012 Spring to get to this configuration. Other than this issue the projects seem to be building correctly. Phill
... View more
Apr 16, 2012
11:05 AM
If the concern is that overwriting a particular file causes problems only when the full setup is run, when the product already exists, would it be helpful to set the Component condition to NEVER_OVERWRITE that particular file, rather than adding another dialog to the setup?
... View more
Oct 06, 2011
02:42 PM
IIS 7.0 is a 'feature' which is part of the operating system. Features are enabled (installed) or disabled using DISM.exe on Vista or later. (IIS 7.5 is on Win 7/2008 R2). So there is not a separate setup package that could be added to your setup. Look up information on Component Based Servicing. You may see some examples using pkgmgr.exe which will also work on Vista, but pkgmgr has been deprecated in favior of dism.exe on Win7 or later. dism.exe can take the names of 'features' to enable on the command line or you can use an unattended XML file to list the 'features' to be enabled. A problem that I continue to struggle with when using the unattended file is how to get the correct value for the package version required in the unattended file. Most of the information that I have found suggesting using the CBS registry key or the version of a system file is just wrong, in that it might work for one version of the OS but when Microsoft pushes out a SP that method of getting the version breaks. I am currently working on trying to solve this problem by calling dism.exe to get all packages, pipe that to a file, and then grep the file to find the correct version for the installed package. This version string is applied to a XML file change prior to calling dism.exe again to install IIS. If anyone knows of a more reliable API to get the package version I would love to hear it! I don't have any advice on SQL Server. Phill
... View more
Jun 08, 2011
02:19 PM
Debbie thanks for the information from the document 'Upgrading Projects from InstallShield 2009 or earlier', which is right on point. However since I (and others have) indicated that we are upgrading projects previously built in InstallShield 2010, I searched the documentation related to 'Upgrading Projects from InstallShield 2010 or earlier' and did not find any of this information. But I am glad to hear Flexera provided the information. By the looks of the posts in this community there are a lot of users who are upgrading projects that build correctly in IS2010 but are now hitting this problem with IS2011, yet your post is the first response form Flexera with any information, even if it is in a document which a IS2010 user would not have thought to look at. Thanks. At least the response was more timely than the Support group's response to the SOIC which I opened the other day. Thanks you.
... View more
Jun 08, 2011
01:36 PM
Actually the advice posted about getting rid of obsolete .h files is not related to this issue and does not resolve this issue. The issue is with an 'upgraded' project which has imported dialog script (.ruls) from a prior version of InstallShield, which now results in the reported link errors. As indicated below the link error provides no further information but by changing the processor definitions a more useful compile error is produced. By comparing my IS2010 upgraded InstallScript project which gets the same L8407 errors, listed in this thread, to a IS2011 'new project', I found that adding the _ISSCRIPT_NEW_STYLE_DLG_DEFS to the Build/Settings/Processor Defines, that I then got a more helpful C8014 'identifier already defined' compile errors on the same two functions as well as several other variables. Double click on each error and commented out each line and then the project results in a clean upgraded IS2011 build. I did not find any documentation in the 'Whats new...' or the 'Upgrading a project..." documents related to this issue, and Flexera has not responded to my Gold Maintenance request (opened prior to finding this solution) for support yet.
... View more
Jun 08, 2011
01:26 PM
By comparing my IS2010 upgraded InstallScript project which gets the same L8407 errors, listed in this thread, to a IS2011 'new project', I found that adding the _ISSCRIPT_NEW_STYLE_DLG_DEFS to the Build/Settings/Processor Defines, that I then got a more helpful C8014 'identifier already defined' compile errors on the same two functions as well as several other variables. Double click on each error and commented out each line and then the project results in a clean upgraded IS2011 build. I did not find any documentation in the 'Whats new...' or the 'Upgrading a project..." documents related to this issue, and Flexera has not responded to my Gold Maintenance request (opened prior to finding this solution) for support yet.
... View more
Jun 08, 2011
01:25 PM
By comparing my IS2010 upgraded InstallScript project which gets the same L8407 errors, listed in this thread, to a IS2011 'new project', I found that adding the _ISSCRIPT_NEW_STYLE_DLG_DEFS to the Build/Settings/Processor Defines, that I then got a more helpful C8014 'identifier already defined' compile errors on the same two functions as well as several other variables. Double click on each error and commented out each line and then the project results in a clean upgraded IS2011 build. I did not find any documentation in the 'Whats new...' or the 'Upgrading a project..." documents related to this issue, and Flexera has not responded to my Gold Maintenance request (opened prior to finding this solution) for support yet.
... View more
Jun 08, 2011
11:02 AM
To clarify, I misstated the name of the literal in the prior post, but it is correct in the title to that post. _ISSCRIPT_NEW_STYLE_DLG_DEFS
... View more
Jun 08, 2011
10:59 AM
I had this same problem when upgrading my projects from IS2010 to IS2011. In comparing a 'new InstallScript project' from IS2011 I observed that the Build/Settings dialog has a literal defined "_ISSCRIPT_NEW_DLG_DEFS". After adding this to my 'upgraded' project, rather than getting L8407 errors on the two functions mentioned in this thread, I then get Compile errors if 'identifier already defined' C8014 on these two function and several other places in the customized dialog scripts. For each C8014 error I commented out the line that it pointed to in code. Then I get a clean build under IS2011 (and the setup project seems to run on a test system correctly, although I have more testing to do in that area). I also created SIOC-000109915 under my Gold Maintenance contract for this issue, prior to finding this solution, but Flexera has not responded to that request for assistance yet. Since I could not find any documentation of this issue in the 'upgrading from InstallShield 2010.." or "Whats new in..." documents I would like ot know from Flexera if there are any other ramifications from making this change that I should be aware of.
... View more
Aug 15, 2010
05:38 PM
Maybe by now you have this figured out, but for future readers, I would not override OnMove. Correct me if I am wrong but that override will prevent the default code in OnMove including the call to FeatureTransferData from happening, meaning that none of the files in your package will be installed. You need to put the DIFx code in the OnInstalled for the feature associated with you Driver's component group. Phill
... View more
Oct 07, 2009
01:16 PM
In an InstallScript project, I do it this way: #define _IIS_INVALID_SITEID_NUM -1 #define _IIS_MAX_SCAN 20 //returned if can't find any ID #define _IIS_DEF_SITEID "2" //used to seed search, unrealted to _IIS_DEF_SITEID #define _IIS_SITEID_SCAN_SEED 0 //#define _IIS51_DEFAULT_SITE "Default Web Site" #define _IIS51_DEFAULT_SITEID "1" #define _IIS_DEFAULT_BINDING ":80:" #define _IIS_STOP_SITE 1 /*/////////////////////////////////////////////////////////////////////////// // prototype BOOL IISGetSiteID(string, BYREF string, BYREF BOOL); // // If site with szName is located then the site ID is returned in svSiteID // and bFound is set to TRUE. The Function also returns TRUE. // If site with szName is not located, then save site ID of last valid site, // and after reach max retries, return one more than the last valid site ID. The // function returns TRUE if returning an incremented SiteID or FALSE if // the SiteID is assumed to be a default (due to some error). // svSiteID can be intialized to seed the scan, otherwise a default is assumed. *////////////////////////////////////////////////////////////////////////////// function BOOL IISGetSiteID(szName, svSiteID, bFound) number nReturn, nSiteID, nBadIDretry, nLastSiteID; string szMsg, szSiteID, szWebComment; string szIPAddress; BOOL bDone, bIISExists, bIDok; BOOL bGiveUp; //true when quite scan due to maximum retries OBJECT objW3SVC, objSite; #if 0 //used to research ServerBindings, not sure that we will ever need this again #define _GET_BINDING LIST listBindings; #else #ifdef _GET_BINDING #undef _GET_BINDING #endif #endif begin bFound = FALSE; /*Make sure IIS exists*/ if (!g_bIISExists) then svSiteID = _IIS_DEF_SITEID; //ASSUME 1 return FALSE; endif; bDone = FALSE; bGiveUp = FALSE; nBadIDretry = 0; nLastSiteID = _IIS_INVALID_SITEID_NUM; nReturn = StrLength(svSiteID); if ( nReturn > 0) then nReturn = StrToNum(nSiteID, svSiteID); if (nReturn < 0) then nSiteID = _IIS_SITEID_SCAN_SEED; endif; else nSiteID = _IIS_SITEID_SCAN_SEED; endif; /*no try-catch but already checked for IIS*/ set objW3SVC = CoGetObject("IIS://LocalHost/W3SVC", ""); if (IsObject(objW3SVC)) then while (bDone = FALSE) NumToStr(szSiteID, nSiteID); /*orig code used try-catch, but no point in this situation*/ set objSite = CoGetObject("IIS://LocalHost/W3SVC/"+szSiteID, ""); if (IsObject(objSite)) then bIDok = TRUE; nLastSiteID = nSiteID; nBadIDretry = 0; /*Check for website, and return ID*/ if (szName != "") then /*IIS6 can get messed up so that it says that a Site object is valid but then throws and unhandled exception on the call to "objSite.ServerComment" so use try...catch*/ try szWebComment = objSite.ServerComment; catch szWebComment = ""; //assume null string if an exception was thrown endcatch; if (szWebComment = szName) then bFound = TRUE; bDone = TRUE; #ifdef _GET_BINDING /*This code was used to research what the objSite.ServerBindings was set to. If we ever need to pass ServerBindings 'array' to a function, declare the function with a VARIANT arg.*/ listBindings = ListCreate(STRINGLIST); if( listBindings != LIST_NULL) then ListAppendFromArray ( listBindings, objSite.ServerBindings, TRUE); SdShowInfoList("Test", "Bindings List", listBindings); ListDestroy(listBindings); endif; #endif endif; endif; else bIDok = FALSE; endif; if (!bDone) then if(!bIDok) then nBadIDretry = nBadIDretry + 1; endif; nSiteID = nSiteID + 1; if (nBadIDretry > _IIS_MAX_SCAN) then //ASSUME more than 20 bad IDs in a row, and we can stop scanning bGiveUp = TRUE; bDone = TRUE; endif; endif; endwhile; else /*Since IIS exists, prior to IIS7 this should never happen, but it may happen in IIS7 if IIS6ManagementObjects were disabled*/ if (SYSINFO.nWinMajor >= 6) then MessageBox(@ERR_NO_IIS_METABASE, MB_OK); abort; else MessageBox(@ERR_NO_W3SVC_SITEID, SEVERE); endif; endif; if (IsObject(objW3SVC)) then set objW3SVC = NOTHING; endif; if (IsObject(objSite)) then set objSite = NOTHING; endif; if(bGiveUp) then if (nLastSiteID > _IIS_INVALID_SITEID_NUM) then nSiteID = nLastSiteID + 1; nReturn = NumToStr(svSiteID, nSiteID); if (nReturn < 0) then svSiteID = _IIS_DEF_SITEID; //ASSUME 1 return FALSE; else return TRUE; //site was not found, but succeded in locating a SiteID to use endif; else //never found a site svSiteID = _IIS_DEF_SITEID; //ASSUME that this is lowest site ID that we want to use return FALSE; endif; endif; //else got here because we found the site. svSiteID = szSiteID; return TRUE; end; /*/////////////////////////////////////////////// // prototype BOOL ControlIISSite(string, number, BOOL); // // This procedure issues control commands to the IIS Admin object *////////////////////////////////////////////////// function BOOL ControlIISSite(szSite, nCommand, bIgnorCmdErr) BOOL bSuccess; string szSitePath, szMsg; OBJECT objSite; begin /*Make sure IIS exists*/ if (!g_bIISExists) then if (bIgnorCmdErr) then return TRUE; else return FALSE; endif; endif; szSitePath = "IIS://LocalHost/W3SVC/" + szSite; bSuccess = TRUE; try set objSite = CoGetObject(szSitePath, ""); catch szMsg = @ERR_NO_CONNECT; Disable(BACKBUTTON); SprintfBox(SEVERE, IFX_PRODUCT_NAME, szMsg, szSitePath); Enable(BACKBUTTON); bSuccess = FALSE; endcatch; if (bSuccess) then try switch (nCommand) case _IIS_STOP_SITE: szMsg = @ERR_IIS_STOP_FAILED; objSite.Stop; case _IIS_START_SITE: //if(SYSINFO.WINNT.bWinXP) then /*make sure all other web sites are stopped, or we will not be able to start this site*/ IIsStopAllSites(); //endif; szMsg = @ERR_IIS_START_FAILED; objSite.Start; default: endswitch; catch if (bIgnorCmdErr) then return TRUE; endif; Disable(BACKBUTTON); SprintfBox(SEVERE, IFX_PRODUCT_NAME, szMsg, szSitePath); Enable(BACKBUTTON); bSuccess = FALSE; endcatch; endif; if (IsObject(objSite)) then set objSite = NOTHING; endif; return bSuccess; end; /*/////////////////////////////////////////////////////////////////////////// // prototype BOOL IISDelWebSite(string, string); // // This procedure is used to delete a web site. Either the name of a // web site can be provided and the site ID will be determined by a // search for web sites with same name. the search will start at the site // ID provided in svSiteID. If a name is not provided, then a Site ID must // be provided which is ASSUMED to be the targeted web site. // string svSiteID IN/OUT if input is > 1 then becomes start of search, // otherwise defaults to ID = 1 to start. *////////////////////////////////////////////////////////////////////////////// function BOOL IISDelWebSite(szName, svSiteID) number nReturn, nSiteID; string szMsg, szSiteID; string szIPAddress; BOOL bRtn, bSearch, bFound; OBJECT objW3SVC, objSite, objDir; begin /*Make sure IIS exists*/ if (!g_bIISExists) then return FALSE; endif; bSearch = FALSE; if (StrLength(szName) > 1) then bSearch = TRUE; else if (StrLength(svSiteID) < 1) then /*Invalid args passed to this call*/ Sprintf(szMsg, @ERR_IIS_PARAMS, szName, svSiteID); /*This number is arbitrary, but must be negative*/ Err.Raise(-666, "IIS.RUL_IISDelWebSite", szMsg); return FALSE; endif; endif; //ASSUME that svSiteID is the site to be deleted if (bSearch) then szSiteID = "0"; bRtn = IISGetSiteID(szName, szSiteID, bFound); if(bRtn && bFound)then nReturn = StrToNum(nSiteID, szSiteID); if (nReturn < 0) then return FALSE; endif; else return FALSE; endif; else szSiteID = svSiteID; nReturn = StrToNum(nSiteID, szSiteID); if (nReturn < 0) then return FALSE; endif; endif; /*Now the site ID has been defined*/ /*Stop the site. Suppress error because it may already be stopped*/ bRtn = ControlIISSite(szSiteID, _IIS_STOP_SITE, FALSE); /*Now delete the site*/ bRtn = TRUE; set objW3SVC = CoGetObject("IIS://LocalHost/W3SVC", ""); if (IsObject(objW3SVC)) then try set objSite = objW3SVC.Delete("IIsWebServer", nSiteID); catch //MessageBox("Couldn't delete web site in: IISDelWebSite", SEVERE); //ignore the error bRtn = FALSE; endcatch; else bRtn = FALSE; endif; if (IsObject(objW3SVC)) then set objW3SVC = NOTHING; endif; if (IsObject(objSite)) then set objSite = NOTHING; endif; return bRtn; end;
... View more
Oct 07, 2009
11:56 AM
If I follow this thread, the issue is that the application is trying to create a file in the application's folder, typically under program files. A typical user does not have the rights to do this. Yes folder permissions could be changed as suggested above or the application could be marked to "requireAdminiustrator", but neither of those suggestions are really the advised solution to this problem. The design of the application should be changed to create the file in a location that the user is allowed to write too. When we started supporting Vista we had to change our applications to call SHGetSpecialFolderPath and CSIDL_COMMON_APPDATA\[ApplicationName] or one of the other paths depending on what you are doing. Applications should have taken this approach on Win XP also, but for Vista and later this is a common change. Phill
... View more
Jul 22, 2009
09:23 AM
I have created a single .iss file that works for both a clean install or a repair, or a modify (if you know which item needs to be selected or deselected in the modify). Before doing this I put code in my setup to write a 'comment' line into the .iss for each dialog, to make it easier for me to analyze the .iss file. Create the .iss file for a clean install. Then create the .iss file for a repair or modify. Then evaluate the two files using a text editor and create a third .iss file using the text editor starting with the clean install .iss and adding in the entries from the 'modify' that are unique. If in the two files you have the same dialog header with different responses then you cannot use a single .iss file, unless you first go customize one of the dialogs in the setup and give it a unique ID. Once you do that you can create a single .iss file that will work for either a clean install, repair, modify, or even uninstall.
... View more
- « Previous
- Next »
Latest posts by phill_mn
Subject | Views | Posted |
---|---|---|
1104 | Aug 06, 2013 08:31 AM | |
1735 | Aug 02, 2013 01:10 PM | |
1754 | Aug 01, 2013 09:45 AM | |
1237 | Jul 31, 2013 09:02 AM | |
1237 | Jul 31, 2013 08:52 AM | |
1138 | Jul 31, 2013 08:39 AM | |
1088 | Jul 24, 2013 08:15 AM | |
843 | Jul 23, 2013 04:13 PM | |
1754 | Jul 22, 2013 07:50 AM | |
884 | Jul 19, 2013 09:18 AM |
Activity Feed
- Posted Re: Help with building a install project for a folder with .dll, .exe, .cmd, files and et on InstallShield Forum. Aug 06, 2013 08:31 AM
- Posted Re: Conditionally installing Components based on Release Flags on InstallShield Forum. Aug 02, 2013 01:10 PM
- Posted Re: Uninstalling MSI from installation of another MSI on InstallShield Forum. Aug 01, 2013 09:45 AM
- Posted Re: Checking for and Installing .Net Framework on InstallShield Forum. Jul 31, 2013 09:02 AM
- Posted Re: Checking for and Installing .Net Framework on InstallShield Forum. Jul 31, 2013 08:52 AM
- Posted Re: files missing in data1.cab and data1.hdr on InstallShield Forum. Jul 31, 2013 08:39 AM
- Posted Re: Check string contains number between 0-9 on InstallShield Forum. Jul 24, 2013 08:15 AM
- Posted XML File change of applicationhost.config works for me. on InstallShield Forum. Jul 23, 2013 04:13 PM
- Posted re-cache your broken MSI with a fixed , prior to doing the on InstallShield Forum. Jul 22, 2013 07:50 AM
- Posted Re: Ini Files. on InstallShield Forum. Jul 19, 2013 09:18 AM
- Posted Re: InstallScript Question on InstallShield Forum. Jul 18, 2013 09:01 AM
- Posted Re: InstallScript Question on InstallShield Forum. Jul 17, 2013 09:25 AM
- Posted Re: Manually Create Shortcut on Desktop for 64 bit OS Can't find it on InstallShield Forum. Jul 09, 2013 03:37 PM
- Posted Re: Urgent Help plsss for find setup.exe directory on InstallShield Forum. Jul 09, 2013 03:18 PM
- Posted Re: Enabling Windows Features and Roles on InstallShield Forum. Jul 03, 2013 06:27 PM
- Posted Re: Setting the System Path Variable on InstallShield Forum. Jul 03, 2013 11:20 AM
- Posted Re: Setting the System Path Variable on InstallShield Forum. Jul 03, 2013 07:56 AM
- Posted Re: Take path from one window, take text from second on InstallShield Forum. Jul 02, 2013 01:21 PM
- Posted Re: Take path from one window, take text from second on InstallShield Forum. Jul 02, 2013 08:30 AM
- Posted Re: CA: PowerShell CA runs always in silent mode on InstallShield Forum. Jul 02, 2013 07:50 AM