Sep 23, 2021
08:59 AM
1 Kudo
Heloo Seshu, Do you know how to remove the "InstallShield" watermark and the line. From the "String Editor" I am able to change "InstallShield" by what I want, by changing value of "IDS_INSTALLSHIELD" or "IDS_INSTALLSHIELD_FORMATTED". But I would like to remove the grey box and the line. Thanks. -Jean-Luc
... View more
Jan 26, 2021
03:01 PM
We are struggling with the same issue with IS 2019. There have been zero improvements in the time taken to build the MSI since IS version 2012.
... View more
Apr 27, 2020
06:07 PM
Here's how I got it to work: NUMBER stdOutHandle;
NUMBER stdErrHandle;
SECURITY_ATTRIBUTES securityAttributes;
begin
// redirect stdout and stderror. need to use the win32 CreateFile
// because the installshield functions return non-win32 handles
securityAttributes.nLength = SizeOf(securityAttributes);
securityAttributes.bInheritHandle = TRUE;
stdOutHandle = KERNEL32.CreateFileA(stdOutFile, (GENERIC_READ | GENERIC_WRITE), FILE_SHARE_READ,
&securityAttributes, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
stdErrHandle = KERNEL32.CreateFileA(stdErrFile, (GENERIC_READ | GENERIC_WRITE), FILE_SHARE_READ,
&securityAttributes, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
LAAW_STARTUPINFO.hStdInput = NULL;
LAAW_STARTUPINFO.hStdOutput = stdOutHandle;
LAAW_STARTUPINFO.hStdError = stdErrHandle;
LAAW_STARTUPINFO.dwFlags = LAAW_STARTUPINFO.dwFlags | STARTF_USESTDHANDLES;
LAAW_PARAMETERS.bInheritHandles = TRUE;
launchAppResult = LaunchAppAndWait(app, args, LAAW_OPTION_WAIT | LAAW_OPTION_HIDDEN);
CloseFile(stdOutHandle);
CloseFile(stdErrHandle);
... View more
Dec 10, 2019
01:44 PM
What if there are features that depends on certain feature to be installed first but it also requires some user inputs for successful installation. We have in total 6 features in our MSI installer, last 3 features requires first feature to be installed first , we also accept inputs from users in our installation wizard that are applied to the last 3 features but first feature is a MUST for last 3 features to be installed successfully along with the user inputs values. Any suggestions?
... View more
May 22, 2019
02:59 AM
I use the same method.
... View more
Apr 05, 2018
02:31 PM
So full disclosure: I haven't done this type of shortcut pinning before. I've only made this work with the taskbar shortcuts, but the process overall should be the same. First of all, you can't natively do this in InstallShield. Microsoft specifically didn't want to provide an API or other easy way to do this, because if they did, every software vendor would do it and the pinned area would fill up with junk just like your desktop does with desktop shortcuts. Baking this into an installer is hostile to the user. That said *I would seriously reconsider the decision to take this path in your installer*. So, assuming you have a very good reason for doing so, what you are going to need to do is reverse engineer what happens when a user clicks on a shortcut to pin it. This is going to be a Shell Verb, basically. Then you need to invoke that shell verb from whatever language, passing the path of the *.lnk file in order to pin it. I found some C# code which does this here: https://stackoverflow.com/questions/42819959/shell-application-verbs-net-3-5 These shell verbs are in the registry, and it's possible that organizations can disable them--make sure on your test machines that it works manually first. Good luck!
... View more
Nov 29, 2017
04:53 AM
Thanks Cary It turns out this is not always the case - on some machines the quotes are there, on others they are not. I think it may be to do with the underlying version of the MSI engine being used..? I'll investigate some more. But in any case, to be sure we're covered on all installs, I will add a deferred custom action to run after InstallServices to check the ImagePath value in the registry (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ ), and add quotes if required.
... View more
Nov 03, 2017
10:02 AM
Have you tried coding like: [ for left square bracket [ ] for right square bracket ]
... View more
Oct 09, 2017
05:01 PM
As far as I know, it is not possible to disable the size in ARP. ReserveCost you can populate dynamically by inserting temporary records using a custom action (lots of examples out there on how to do this, but mostly used for ComboBox values), so if you have some way of estimating what's already on the machine, this might still be an option. If you are going this route, make sure you sequence the CA in the Exec/UI sequences and condition accordingly, and ensure it's before CostFinalize. There is one other possibility, which will be a lot of work. The properties like size and such are populated by the Windows Installer engine, and so you may be able to get your own custom entry which doesn't contain the size value. Note that there's probably packages in ARP which don't display their size--that is because they use an *.exe installer which manages the ARP entry, and which doesn't set the flag to tell it to use Windows Installer to manage it. So, you could set ARPSYSTEMCOMPONENT for your *.msi package and wrap it with some sort of *.exe that either you write yourself, or use something off the shelf like an InstallScript project or a Wix Bootstrapper application. If you are really, really stuck on this, and it's very, very important, you can always submit a per-incident to Microsoft support. (They will charge you for it, and there's no guarantee they will provide a solution that is easy or satisfying--but they built the Msiexec.exe engine). Good luck!
... View more
Sep 19, 2017
09:52 AM
CR, Cary is correct - it cannot be done solely in InstallScript since there is no Random function, but it can be done with InstallScript and a batch file if you don't want to go the external DLL route. Here is an example. You will need to put the attached .bat file in the Support Files for your project: @echo OFF setlocal EnableDelayedExpansion cls :: %1 should be # of loops to do :: %2 should be temp filename to store output :: code based off of: :: https://stackoverflow.com/questions/5777400/how-to-use-random-in-batch-script :: 33 and 126 are hardcoded due to the desired ASCII range; can be changed :: http://www.asciitable.com/ :: delete the output file if it already exists; ignore errors del %2 >NUL 2>&1 :: start off with a "new" random echo !RANDOM! :: loop for the desired number of times for /L %%a in (1 1 %1) do ( call:rand 33 126 echo !RAND_NUM!>>%2 ) ::pause exit /b :: rand() :: %1 is min, %2 is max. :: RAND_NUM is set to a random number from min through max. :rand SET /A RAND_NUM=%RANDOM% * (%2 - %1 + 1) / 32768 + %1 exit /b and include this file (or add these functions to an existing file in your project) [CODE]//=========================================================================== // // File Name: Random.rul // // Description: utility functions for generating random string of characters. // requires external .bat file to actually generate the random numbers. //=========================================================================== // main function prototype STRING GetRandomCharacters( byval NUMBER ); // nNumChars // helper function prototype STRING Chr( byval STRING ); // szASCII //--------------------------------------------------------------------------- //get specified number of random characters from subset of ASCII table function STRING GetRandomCharacters( nNumChars ) STRING szNumChars, szBatFile, szTempFile, szLine, szRandomString, svError; NUMBER nFileHandle, nFileOpen, nResult; begin szBatFile = "random.bat"; // file assumed to be in this project's Support Files szTempFile = "rnd.txt"; NumToStr( szNumChars, nNumChars ); // "/k" is for debugging //LaunchAppAndWait( WINSYSDIR ^ "cmd.exe", "/k \"" + SUPPORTDIR ^ szBatFile + "\" " + szNumChars + " " + FOLDER_TEMP ^ szTempFile, WAIT ); LaunchAppAndWait( WINSYSDIR ^ "cmd.exe", "/c \"" + SUPPORTDIR ^ szBatFile + "\" " + szNumChars + " " + FOLDER_TEMP ^ szTempFile, WAIT | LAAW_OPTION_HIDDEN ); szRandomString = ""; // make sure the file exists before trying file operations if Is( FILE_EXISTS, FOLDER_TEMP ^ szTempFile ) then OpenFileMode( FILE_MODE_NORMAL ); // open file as read-only nFileOpen = OpenFile( nFileHandle, FOLDER_TEMP, szTempFile ); if nFileOpen = 0 then nResult = GetLine( nFileHandle, szLine ); while ( nResult = 0 ) szRandomString = szRandomString + Chr( szLine ); //get ASCII char equivalent of the random # // get next line of the file: nResult = GetLine( nFileHandle, szLine ); endwhile; CloseFile( nFileHandle ); else svError = "Error: unable to open \"" + FOLDER_TEMP ^ szTempFile + "\""; MessageBox( svError, INFORMATION ); // debug endif; else svError = "Error: \"" + FOLDER_TEMP ^ szTempFile + "\" not found!"; MessageBox( svError, INFORMATION ); // debug endif; try DeleteFile( FOLDER_TEMP ^ szTempFile ); // cleanup: delete rnd.txt catch endcatch; return szRandomString; end; //--------------------------------------------------------------------------- //convert a decimal number as string) representing an ASCII character to that character //mimics the "Chr" function in VB (for a limited subset of the ASCII table) function STRING Chr( szASCII ) STRING svASCIIval; begin switch( szASCII ) case "32": svASCIIval = " "; case "33": svASCIIval = "!"; case "34": svASCIIval = "\""; //note": double quote character has to be escaped case "35": svASCIIval = "#"; case "36": svASCIIval = "$"; case "37": svASCIIval = "%"; case "38": svASCIIval = "&"; case "39": svASCIIval = "'"; case "40": svASCIIval = "("; case "41": svASCIIval = ")"; case "42": svASCIIval = "*"; case "43": svASCIIval = "+"; case "44": svASCIIval = ","; case "45": svASCIIval = "-"; case "46": svASCIIval = "."; case "47": svASCIIval = "/"; case "48": svASCIIval = "0"; case "49": svASCIIval = "1"; case "50": svASCIIval = "2"; case "51": svASCIIval = "3"; case "52": svASCIIval = "4"; case "53": svASCIIval = "5"; case "54": svASCIIval = "6"; case "55": svASCIIval = "7"; case "56": svASCIIval = "8"; case "57": svASCIIval = "9"; case "58": svASCIIval = ":"; case "59": svASCIIval = ";"; case "60": svASCIIval = "<"; case "61": svASCIIval = "="; case "62": svASCIIval = ">"; case "63": svASCIIval = "?"; case "64": svASCIIval = "@"; case "65": svASCIIval = "A"; case "66": svASCIIval = "B"; case "67": svASCIIval = "C"; case "68": svASCIIval = "D"; case "69": svASCIIval = "E"; case "70": svASCIIval = "F"; case "71": svASCIIval = "G"; case "72": svASCIIval = "H"; case "73": svASCIIval = "I"; case "74": svASCIIval = "J"; case "75": svASCIIval = "K"; case "76": svASCIIval = "L"; case "77": svASCIIval = "M"; case "78": svASCIIval = "N"; case "79": svASCIIval = "O"; case "80": svASCIIval = "P"; case "81": svASCIIval = "Q"; case "82": svASCIIval = "R"; case "83": svASCIIval = "S"; case "84": svASCIIval = "T"; case "85": svASCIIval = "U"; case "86": svASCIIval = "V"; case "87": svASCIIval = "W"; case "88": svASCIIval = "X"; case "89": svASCIIval = "Y"; case "90": svASCIIval = "Z"; case "91": svASCIIval = "["; case "92": svASCIIval = "\\"; //note": backslash has to be escaped case "93": svASCIIval = "]"; case "94": svASCIIval = "^"; case "95": svASCIIval = "_"; case "96": svASCIIval = "`"; case "97": svASCIIval = "a"; case "98": svASCIIval = "b"; case "99": svASCIIval = "c"; case "100": svASCIIval = "d"; case "101": svASCIIval = "e"; case "102": svASCIIval = "f"; case "103": svASCIIval = "g"; case "104": svASCIIval = "h"; case "105": svASCIIval = "i"; case "106": svASCIIval = "j"; case "107": svASCIIval = "k"; case "108": svASCIIval = "l"; case "109": svASCIIval = "m"; case "110": svASCIIval = "n"; case "111": svASCIIval = "o"; case "112": svASCIIval = "p"; case "113": svASCIIval = "q"; case "114": svASCIIval = "r"; case "115": svASCIIval = "s"; case "116": svASCIIval = "t"; case "117": svASCIIval = "u"; case "118": svASCIIval = "v"; case "119": svASCIIval = "w"; case "120": svASCIIval = "x"; case "121": svASCIIval = "y"; case "122": svASCIIval = "z"; case "123": svASCIIval = "{"; case "124": svASCIIval = "|"; case "125": svASCIIval = "}"; case "126": svASCIIval = "~"; default: //not sure what the default value should be svASCIIval = ""; endswitch; return svASCIIval; end;[/CODE] then call the GetRandomCharacters function like this: szRandomString = GetRandomCharacters( nNumChars ); MessageBox( szRandomString, INFORMATION ); //debug HTH
... View more
Jun 30, 2017
07:46 AM
rguggisberg wrote: When you execute SYSTEMINFO from a CMD prompt the 'Network Card(s):' info appears at the end. You can pipe the output to a file and then parse it to pull out what you want. My output looks something like this: Network Card(s): 4 NIC(s) Installed. [01]: Realtek PCIe GBE Family Controller Connection Name: Local Area Connection DHCP Enabled: No IP address(es) [01]: xxx.xxx.0.xxx [02]: Juniper Network Connect Virtual Adapter Connection Name: Network Connect Adapter Status: Media disconnected [03]: HP 802.11b/g Wireless Network Adapter Connection Name: Wireless Network Connection Status: Media disconnected [04]: PANGP Virtual Ethernet Adapter Connection Name: Local Area Connection 2 Status: Media disconnected Thanks for the clarity. Does the same information can be collected by any of SYSINFO property in Installshield? I tried to search but couldnt find. However, I achieved my requirement by running the following attached CMD file. I feel anyone can make use of it.
... View more
Nov 05, 2014
01:17 PM
Cary R wrote: The license file can't be the keypath. The literal file path it installs to is used as the keypath in the registry, which means that it's not repairing that component. Give it a Registry keypath under HKCU; this way the registered path in the MSI registry doesn't change, but it will be found to be missing. My guess is Wise did this on your behalf on the back end. Thanks..I figured this out late yesterday afternoon. This was exactly the problem.
... View more
Aug 06, 2014
05:02 PM
This has been seen on Server 2008 as well. Try: --Enabling the Computer browser service --Enable NetBIOS over TCP --Add an exception in the firewall for the Computer Browser service --Try again Basically, the error comes from not being able to resolve the domain controller for the domain you put in. It tries to do so by querying the network, instead of relying on your AD connection. Hope that helps!
... View more
Apr 19, 2013
01:34 PM
But, this does indeed seem to help resolve the issue. public int CA(int hMSI) { StringBuilder SqlServerConnString = new StringBuilder(); SqlServerConnString.EnsureCapacity(1000); int buffer = 1000; int retCode; try { retCode = MsiInterop.MsiGetProperty(hMSI, "IS_SQLSERVER_CONNSTRING", SqlServerConnString, ref buffer); } catch (Exception e) { MsiInterop.CELog(hMSI, "Exception: " + e.Message); } return 0; } Thanks much, Mike! Your explanation makes sense as to why to do it this way, but it seems strange that it only causes a problem from a ControlEvent.
... View more
Aug 21, 2013
09:20 AM
mkusic wrote: Thanks for the info... I'll check it out. Could you share your results with us? I've faced with such a problem recently, I do not have to make a decision today, I just think about it. Therefore your info will be very helpful. Thanks.
... View more
Latest posts by Cary_R
Subject | Views | Posted |
---|---|---|
1639 | May 02, 2018 02:59 PM | |
6820 | Apr 19, 2018 12:48 AM | |
1548 | Apr 19, 2018 12:42 AM | |
2070 | Apr 05, 2018 02:31 PM | |
1011 | Mar 07, 2018 10:26 PM | |
1046 | Feb 21, 2018 12:27 PM | |
4175 | Feb 16, 2018 02:13 PM | |
926 | Feb 05, 2018 11:47 AM | |
1627 | Jan 16, 2018 11:40 AM | |
1035 | Jan 16, 2018 10:30 AM |
Activity Feed
- Posted Re: Installer Class - Error 1001 InstallShield 2015 Limited Edition on InstallShield Forum. May 02, 2018 02:59 PM
- Posted Re: How to run Installshield 2016 with powershell parameters? on InstallShield Forum. Apr 19, 2018 12:48 AM
- Posted Re: How to remove InstallShield water mark in Suite installer on InstallShield Forum. Apr 19, 2018 12:42 AM
- Posted Re: Pin/Unpin Shortcut to Start Menu Layout on Windows 10 using InstallShield 2016 SP2 on InstallShield Forum. Apr 05, 2018 02:31 PM
- Posted Re: Patch based patches problems on InstallShield Forum. Mar 07, 2018 10:26 PM
- Posted Re: MST with Environment Variables Issues on InstallShield Forum. Feb 21, 2018 12:27 PM
- Posted Re: How to install SQL 2017 Management Objects (NuGet) on InstallShield Forum. Feb 16, 2018 02:13 PM
- Posted Re: Managed Code Custom Action Failing on InstallShield Forum. Feb 05, 2018 11:47 AM
- Posted Re: How to catch powershell errors in Installscript through LaunchAppandWait on InstallShield Forum. Jan 16, 2018 11:40 AM
- Posted Re: Decrypting a File... on InstallShield Forum. Jan 16, 2018 10:30 AM
- Posted Re: SecurCustomProperties Usage Question... on InstallShield Forum. Jan 16, 2018 10:29 AM
- Posted Re: Plug in in Install shield on InstallShield Forum. Dec 01, 2017 12:08 PM
- Posted Re: Binary Table error -1024 on InstallShield Forum. Nov 29, 2017 07:51 AM
- Posted Re: Basic MSI creating a service path without quotes on InstallShield Forum. Nov 27, 2017 05:44 PM
- Posted Re: Why do some files overwrite and others don't upon upgrade? on InstallShield Forum. Nov 22, 2017 01:48 AM
- Posted Re: Where is [GlobalAssemblyCache]? on InstallShield Forum. Nov 14, 2017 12:23 PM
- Posted Re: Setup executable without ASLR on InstallShield Forum. Nov 06, 2017 02:02 PM
- Posted Re: Using Installer Class not working on InstallShield Forum. Nov 03, 2017 01:55 PM
- Posted Re: Using Installer Class not working on InstallShield Forum. Oct 30, 2017 05:39 PM
- Posted Re: InstallShield 2017 or next version? on InstallShield Forum. Oct 26, 2017 12:57 PM