Detecting supported Windows Operating System versions for built Inno Setup executables - inno-setup

I have two legacy installers of my program I kept on my website:
One dated 2014
One dated 2009
I usually only keep legacy installers because there was a change support of operating systems. But I can see no official documentation at my end to confirm this nor on my website.
Is there any safe way to determine what windows version these compiled installers supported?

Check what version of Inno Setup the installers were built with.
(use About Setup command in menu that appears if you click in window title icon)
And then check what version of Windows did that version of Inno Setup support in Inno Setup version history.
Windows 2000, XP, and Server 2003 are not supported since Inno Setup 6.0 (2019-02-11)

Related

Compiling Windows apps for other versions of Windows

Are binaries built on Windows 7 guaranteed to work on 8/Vista, 10, and 11?
Are binaries built on Windows 10 guaranteed to work on Windows 11?
I've seen some things that make me wonder if Windows 11 is still technically Windows 10 in at least some ways that might ensure apps built on Windows 11 be sure to run on Windows 10?
I'm worried not just about the EXE format but for instance the shared library APIs etc. One can build, I'm sure, on a newer Windows and use a DLL, or a function in a DLL, that doesn't exist on the older Windows.
All versions of Windows support the same "Portable Executable" format for EXEs, but it all comes down to (a) the linker settings in the metadata of the binary, (b) the architecture for the processor, and (c) the APIs it needs to import.
If you build a Win32 classic desktop application using _WIN32_WINNT=0x0601, the WINAPI_FAMILY_DESKTOP API partition (the default), and use a recent version of the VC++ toolset, it will set a linker value of "6.00 operating system version". The resulting binary is compatible with Windows 7 SP1, and depending on exactly what APIs you use it might work on Windows Vista SP2 as well. It will also be forward compatible to Windows 8.x, Windows 10, and Windows 11.
Both x86 and x64 Windows support 32-bit applications, although x64 Windows does not support super-old 16-bit Windows programs that technically work on 32-bit Windows.
There are many application compatibility bugs that can make a program that should technically work on a newer version of Windows fail, but these can be avoided by just testing on newer versions of the OS before shipping.
Officially the modern VC++ toolsets, the Visual C/C++ Runtime, and Windows SDKs do not support Windows Vista, Windows 7 RTM, or Windows 8.0 development.
See Microsoft Docs.

Where is the NCSO.jar and java in IBM Notes on a Mac?

I'm using IBM Notes 9 Social Edition (Mac) however it does not contain this jar on the client. Nor is it packaged with java. Is the Notes API not supported on a Mac environment?
I don't know why it's not found on your machine - perhaps it's only installed with the Domino Designer client nowadays. But you can get NCSO.jar from your Domino server or from a Domino Designer installation on a Windows machine. There's no reason why it wouldn't work on a Mac.
IBM Notes 9 Social Edition (Mac) does not ship with NCSO.jar, but you can retrieve it from other sources (as #Richard Schwartz metions). It does work in the Mac environment but you need to be sure to use the JDK 1.6 that it gets hooked up to when IBM Notes is installed. e.g.:
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk
Also, you need to ensure you use the -d32 flag to run it in 32-bit mode, as it defaults to 64-bit mode. You cannot use any new JDK version as the 32-bit mode is no longer supported.
Furthermore, you may need to update the DYLD_LIBRARY_PATH environment variable to point to your notes dydll library files in the Notes installation eg.:
DYLD_LIBRARY_PATH="/Applications/IBM Notes.app/Contents/MacOS"

DirectX libs in x64 program

I'm trying to compile a program as 64 bits, it works perfectly with a simple console program but if I use my directX program it says me: error LNK1181: cannot open input file 'd3dx9.lib'. When I compile my directX program as 32 bits it works but in x64 it doesn't. I think visual studio 2013 has a default directory of directx with is x86 but I don't know if I'm right or not. I need to use x64 directX libs. How could I link them? Thanks for read.
VS 2013 comes with the Windows 8.1 SDK, and as of the Windows 8.0 SDK the DirectX SDK is considered deprecated. All versions of D3DX (D3DX9, D3DX10, and D3DX11) are also deprecated and are only available with the legacy DirectX SDK. You can use the legacy DirectX SDK in combination with the Windows 8.x SDK, but it requires the reverse path setup of VS 2010 or earlier. See MSDN and this blog post.
In your case, you probably don't have your project's VC++ Directories properties set up correctly for the x64 configurations:
Executable path:
Win32 configs: $(ExecutablePath);$(DXSDK_DIR)Utilities\bin\x86
x64 configs: $(ExecutablePath);$(DXSDK_DIR)Utilities\bin\x64;$(DXSDK_DIR)Utilities\bin\x86
Include path
Both configs: $(IncludePath);$(DXSDK_DIR)Include
Library path
Win32 configs: $(LibraryPath);$(DXSDK_DIR)Lib\x86
x64 configs: $(LibraryPath);$(DXSDK_DIR)Lib\x64
Note: If you were using the v120_xp Platform Toolset for Windows XP support, you'd actually be using the Windows 7.1A SDK, and would go with the same path order as VS 2010 which is the reverse of the ones shown here--i.e. the DirectX SDK paths would go first, then the standard paths. See this post if you are trying to target Windows XP.
This all said, unless you are specifically targeting Windows XP the recommendation is to (a) use Direct3D 11 instead of legacy Direct3D 9, (b) avoid using the legacy DirectX SDK at all, and (c) avoid using D3DX9/D3DX10/D3DX11.
See also:
Living without D3DX
DirectX SDK Tools Catalog
DirectX SDK Samples Catalog
DirectX SDKs of a certain age

VC 2012 merge modules under Windows XP

We have a VC++ 2012 application for native Windows (classic fat app)
Also we have a NSIS based installer.
I would like to add the VC110_CRT merge modules to the installer but the merge modules cannot be installed on Windows XP. The error Message is.
This installation package cannot be installed by the Windows Installer service. Your must install a Windows service pack that conatains a newer version of the Windows Installer service.
and yes, Its a fully updated Windows XP (SP 3 + all updates). As far as I understand it, we need at least Windows Vista to install the update.
My Question:
Is there a way to convert the Microsoft_VC110_CRT_x86.msm module, so its usable under Windows xp
I know I can use the vs_2012_redist, but it has ~6,5 MB instead of ~0,8 of the merge modul size.
and I only need the CRT, because the app uses QT and no MFC/ATL/....
This is an incorrect error message. MSIEXEC is looking at the schema verson in the SummaryInformationStream of the MSM and seeing it's newer then the version of MSI on Windows and giving you this error message.
In truth, merge modules can never be installed because they have no concept of Product or Features. They are merely encapsulated collections of components and related installation metadata. Merge modules are like .LIB files in C/C++ and are statically linked (merged) into an MSI at build time.
NSIS isn't a Windows Installer technology so it can't use merge modules. Instead you should use the redistributable provided by Microsoft and launch the EXE with the correct command line.
You're only other options are to deploy the desired DLL privately (in your application directory), statically link it in your EXE or dump NSIS and create a proper MSI.
Be aware of the security / patching implications of your choice.

How to create vc++ program which can be install

Thanks in advance...
I have a solution in vc++ and it is working fine. I need to create this as a program that can be installed. Also need to create a start menu folder and a desktop icon. What are the steps to create this?
Use an install builder. There's several (free) ones around on the web that you can search for.
Personally, I recommend InnoSetup by Jordan Russel. It's free, nice, easy to use, and very rich in features : (quoting from website)
Support for all versions of Windows in use today: 7, 2008 R2, Vista,
XP, 2008, 2003, 2000, Me, 98, 95, and NT 4.0. (No service packs are
required.) Extensive support for installation of 64-bit applications
on the 64-bit editions of Windows. Both the x64 and Itanium
architectures are supported. (On the Itanium architecture, Service
Pack 1 or later is required on Windows Server 2003 to install in
64-bit mode.)
Supports creation of a single EXE to install your
program for easy online distribution. Disk spanning is also supported.
Standard Windows 2000/XP-style wizard interface.
Customizable setup types, e.g. Full, Minimal, Custom.
Complete uninstall capabilities.
Installation of files: Includes integrated support for "deflate",
bzip2, and 7-Zip LZMA/LZMA2 file compression. The installer has the
ability to compare file version info, replace in-use files, use shared
file counting, register DLL/OCX's and type libraries, and install
fonts.
Creation of shortcuts anywhere, including in the Start Menu and
on the desktop.
Creation of registry and .INI entries. Running other
programs before, during or after install.
Support for multilingual
installs, including right-to-left language support.
Support for passworded and encrypted installs.
Support for digitally signed
installs and uninstalls.
Silent install and uninstall.
Unicode installs. (Windows 2000/XP or later)
Integrated preprocessor option
for advanced compile-time customization.
Integrated Pascal scripting
engine option for advanced run-time install and uninstall
customization.
Full source code is available (Borland Delphi 2.0-5.0
and 2009).
I would learn Wix if I were you. The current tutorial at http://wix.tramontana.co.hu/ will help you quickly implement the setup for your application. Also, this will be a good investment in knowledge and it will allow you to implement more complex setup applications in the future.

Resources