; ************************************************* SM3 CONFIGURATION FILE *****************************************************
; Description:
;     This is an INI file which contains the configuration information for the automated setup of either an 
;     ENGINEERING or PRODUCTION environment for developing or running SM3 GUTS (Guidance Unit Test Software)
;
; Author: Duc Le
;
; ******************************************************************************************************************************
;
;
;
; ******************************************************************************************************************************
; THIS SECTION IS REQUIRED
; ******************************************************************************************************************************
[General]
Program_Name = NGI - ComposableTestSoftware Standalone Build Setup
; 64-bit or 32-bit. Possible values: 32 or 64
Application_Platform = 32

[Global_Settings]
Always_Run_Application_Using_Admin_Account = false
Suppress_All_Prompts = true
Provide_Windows_Password_For_Auto_Login = false

; ******************************************************************************************************************************
; THIS SECTION IS REQUIRED
; ******************************************************************************************************************************
; This section defines all the setup steps to be performed and allow the user the option of enabling/disabling each step
; The key can be anything.
; The value must define the setup step and its associated section name separated by comma: Setup_Step,Section_Name
; Below is a list of all possible setup steps:
;    CONFIGURE_NETWORK_ADAPTERS
;    RUN_APPLICATIONS
;    INSTALL_SOFTWARE_PACKAGES
;    ENABLE_INTERNET_INFORMATION_SERVICES
;    CREATE_DIRECTORIES
;    CREATE_NETWORK_SHARES
;    SET_ENVIRONMENT_VARIABLES
;    SET_DOTNET_FRAMEWORK_2_SECURITY_ZONE_LEVELS
;    TRANSFER_FILE_PACKAGES
;    MODIFY_WINDOWS_REGISTRY
;    PROCESS_GUTS_CONFIG_FILE
;    CREATE_WINDOWS_SHORTCUTS
;    ASSIST_BUILDING_GUTS_APP
;    REMOVE_FILES_FOLDERS
;
; The setup setup can be run more than once by creating another key and assigned the setup step to it
; Each setup step needs a section name. Section name provides all the information necessary for the setup step
; The sequence of the execution of the setup steps will be in the same order as they are specified.
; ******************************************************************************************************************************
[Setup_Step_Manager]
;step = RUN_APPLICATIONS,Extract_Software_Archives
step = INSTALL_SOFTWARE_PACKAGES,Install_Software
;step = CREATE_DIRECTORIES,Paths_Creation
;step = CREATE_NETWORK_SHARES,Paths_Sharing
;step = SET_ENVIRONMENT_VARIABLES,Env_Variables
;step = TRANSFER_FILE_PACKAGES,Files_Transfer_Packages
;step = CREATE_WINDOWS_SHORTCUTS,Windows_Shortcuts
;step = RUN_APPLICATIONS,Shut_Down_National_Instruments_Processes
;step = REMOVE_FILES_FOLDERS , Files_Folders_Removal

; ******************************************************************************************************************************
; THIS SECTION IS OPTIONAL
; ******************************************************************************************************************************
; This section is used to install various software application
; For each software application to be installed, 4 things can be defined:
;
; Possible keys:
;     app#_name (REQUIRED. Name of the application to be installed/checked)
;     app#_setup_file (OPTIONAL. Path and name of the installer)
;         - the setup file can make use of macros. Look below for the available macros
;     app#_setup_argument (OPTIONAL. Argument for the setup file. Usually to perform unattended install)
;         - sometimes the argument can include paths.  Some programs will require absolute path while others allow relative paths
;           the user has the option of specifying relative paths in the argument and have the program resolve them at runtime
;           In order to make this possible, the user will have to specify a new key for each path to be resolved in the argument
;         - the argument can specify {app#_path} 
;         - the argument can make use of macros. Look below for the available macros
;         - the actual path being inserted in the argument will not have backslash at the end of the path
;     app#_setup_confirm_prompt (OPTIONAL. Prompt user to confirm before installation starts.)
;          - possible values: yes, no
;            - yes: there will be prompt asking user confirm/refuse install
;            - no: installation will start automatically ( this is the default )
;     app#_exe_file (REQUIRED only if app#_hklm_reg_key is not specified. 
;                    This is used to verify that the software successfully installed)
;     app#_reg_path (REQUIRED only if app#_exe_file is not specified. Registry folder path, not including valuename)
;     app#_reg_type (REQUIRED only if app#_reg_key is specified)
;            - there are only three options for this key ( classes_root, current_user, local_machine)
;     app#_reg_value (REQUIRED only if app#_reg_key is specified. Registry value name's value)
;     app#_reg_name (REQUIRED only if app#_reg_key is specified.  Registry value name)
;     app#_reg_compare (REQUIRED only if app#_reg_key is specified.  Compare operator between value name's value specified here versus actual value read from registry)
;             - there are only six options for this key ( eq, lt, gt, lte, gte, ne )
;
; Available Path macros:
;    {user_desktop}, {user_temp_folder}, {cd_drive}
;
; example 1:
;     app1_name = Perl 5.6.1.638
;     app1_setup_file = {user_temp_folder}\Installer.bat
;     app1_exe_file = C:\Perl\bin\perl.exe
;
; example 2:
;     app1_reg_path = SOFTWARE\National Instruments\NI-488.2\CurrentVersion
;     app1_reg_type = local_machine
;     app1_reg_value = 15.0
;     app1_reg_name = Version
;     app1_reg_compare = gte
;     app1_name = National Instrument 488.2 (v15 or higher)
;     app1_setup_file = C:\ni\setup.exe
;
; example 3:
;     app1_exe_file = C:\Perl\bin\perl.exe
;     app1_name = Perl 5.6.1.638
;
; example 4:
;     app1_name = Sapera LT 8.11 (x64)
;     app1_setup_file = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\Software\TeledyneDalsa\Sapera_LT_8.11_RuntimeSetup.exe
;     app1_setup_argument = -s -f1"{app1_setup_file}\sapera_setup.iss" 
;     app1_reg_path = SOFTWARE\Teledyne DALSA\Sapera LT
;     app1_reg_type = local_machine
;     app1_reg_name = IsSaperaFrameGrabberSupport
;
; ******************************************************************************************************************************
; Visual Studio ClassRoot Registry Keys
;
;    {"VS2005", "VisualStudio.DTE.8.0"},
;    {"VS2008", "VisualStudio.DTE.9.0"},
;    {"VS2010", "VisualStudio.DTE.10.0"},
;    {"VS2012", "VisualStudio.DTE.11.0"},
;    {"VS2013", "VisualStudio.DTE.12.0"},
;    {"VS2015", "VisualStudio.DTE.13.0"}
;
; Visual Studio Redistributable Local_Machine Registry Keys
;
;    {"VS2005_x64", @"SOFTWARE\Classes\Installer\Products\1af2a8da7e60d0b429d7e6453b3d0182"},
;    {"VS2005_x86", @"SOFTWARE\Classes\Installer\Products\c1c4f01781cc94c4c8fb1542c0981a2a"},
;    {"VS2008_x64", @"SOFTWARE\Classes\Installer\Products\67D6ECF5CD5FBA732B8B22BAC8DE1B4D"},
;    {"VS2008_x86", @"SOFTWARE\Classes\Installer\Products\6E815EB96CCE9A53884E7857C57002F0"},
;    {"VS2010_x64", @"SOFTWARE\Classes\Installer\Products\1926E8D15D0BCE53481466615F760A7F"},
;    {"VS2010_x86", @"SOFTWARE\Classes\Installer\Products\1D5E3C0FEDA1E123187686FED06E995A"},
;    {"VS2012_x64", @"SOFTWARE\Classes\Installer\Dependencies\{ca67548a-5ebe-413a-b50c-4b9ceb6d66c6}"},
;    {"VS2012_x86", @"SOFTWARE\Classes\Installer\Dependencies\{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}"},
;    {"VS2013_x64", @"SOFTWARE\Classes\Installer\Dependencies\{050d4fc8-5d48-4b8f-8972-47c82c46020f}"},
;    {"VS2013_x86", @"SOFTWARE\Classes\Installer\Dependencies\{f65db027-aff3-4070-886a-0d87064aabb1}"},
;    {"VS2015_x64", @"SOFTWARE\Classes\Installer\Dependencies\{3ee5e5bb-b7cc-4556-8861-a00a82977d6c}"},
;    {"VS2015_x86", @"SOFTWARE\Classes\Installer\Dependencies\{23daf363-3020-4059-b3ae-dc4ad39fed19}"}
;
; ******************************************************************************************************************************
[Install_Software]
app5_name = Visual Studio 2022
app5_setup_argument = -p --norestart --noweb --add Microsoft.VisualStudio.Workload.ManagedDesktop;includeRecommended Microsoft.VisualStudio.Workload.NativeDesktop;includeRecommended Microsoft.VisualStudio.Component.VC.ATLMFC Microsoft.VisualStudio.Component.VC.CLI.Support Microsoft.VisualStudio.Workload.VisualStudioExtension;includeRecommended
app5_reg_path = VisualStudio.DTE.17.0
app5_reg_type = classes_root
app5_setup_file = D:\Windows_Stuff\Visual_Studio_2022.17.9.5\vs_setup.exe
app5_install_process_name = setup

; ******************************************************************************************************************************
; THIS SECTION IS OPTIONAL
; ******************************************************************************************************************************
; This section is used for enabling windows features
; Only one thing needs to be defined for this section.
;   - a text file that lists windows feature name line by line
;
; Possible keys:
;     feature_list_file
;
; example:
;     windows_feature_list_file = .\feature_list.txt
; ******************************************************************************************************************************
[Windows_Features]
windows_feature_list_file = ..\Data\windows_feature_list.txt

; ******************************************************************************************************************************
; THIS SECTION IS OPTIONAL
; ******************************************************************************************************************************
; This section is used to run various applications or scripts
; 
; Possible keys:
;    app#_description (OPTIONAL. Describe the purpose of running this application)
;    app#_path (REQUIRED.  Full path and name of the application to be run)
;         - the path can take advantage of using macros. Look below for the available macros
;    app#_is_console (REQUIRED. Specify if the application is a console application (i.e. DOS application)
;         - value is either true/false
;    app#_argument (OPTIONAL. Arguments to be passed to the application)
;         - sometimes the argument can include paths.  Some programs will require absolute path while others allow relative paths
;           the user has the option of specifying relative paths in the argument and have the program resolve them at runtime
;           In order to make this possible, the user will have to specify a new key for each path to be resolved in the argument
;         - the argument can specify {app#_path} 
;         - the argument can make use of macros. Look below for the available macros
;         - the actual path being inserted in the argument will not have backslash at the end of the path
;         - sometimes, the argument maybe include equal sign in them, but we can't have equal sign
;           in the value of the INI.  To make it possible, if an equal sign is needed in the ini file
;           use <eq> in place of =
;
;    app#_argument_path# - for each of these keys, there must be a corresponding {app#_argument_path#} defined in the value of app#_argument
;   
; Available Path macros:
;    {user_desktop}, {user_temp_folder}, {cd_drive}
;
; Example 1:
;     app1_path = C:\ReleaseIB_Production\app.exe
;     app1_arguments = -role Datasrv -suite LSPS3 -production
;
; Example 2:
;     app1_description = Extracting ActivePerl archive
;     app1_path = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\software\7-Zip\7z.exe
;     app1_argument_path1 = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\software\
;     app1_argument = x "{app1_argument_path1}\Perl.7z" -o"{user_temp_folder}" -y
;
; Example 3:
;     app1_description = Extracting ActivePerl archive
;     app1_path = {cd_drive}\7-Zip\7z.exe
;     app1_argument_path1 = ..\..\..\..\..\Deployment\SM3_IB_Auto_Setup\Repository\software\
;     app1_argument = x "{app1_argument_path1}\Perl.7z" -o"{user_temp_folder}" -y
; ******************************************************************************************************************************
[Extract_Software_Archives]
;app1_description = Extracting Visual Studio 2012 archive
;app1_cd_label = GUTS Support Appz 1/2
;app1_path = {cd_drive}\DISK1\7-Zip\7z.exe
;app1_is_console = true
;app1_argument = x "{cd_drive}\DISK1\msvs2012.7z" -o"{user_temp_folder}\vs2012" -y

;
; ******************************************************************************************************************************
; THIS SECTION IS OPTIONAL
; ******************************************************************************************************************************
; Modify Network Adapter's settings
;
; Possible keys:
;     nic#_pci_location ( REQUIRED.)
;         - the value must be in the form of: #,#,# ( bus, device, function)
;            i.e.: 0,25,0 - bus = 0, device = 25, function = 0
;     nic#_adapter_name (OPTIONAL. Set the name of the network adapter)
;     nic#_ip_and_subnet (OPTIONAL. Set ip address and subnet mask of network adapter)
;         - the value must be in the form of: #.#.#.#,#.#.#.#
;           i.e.: 192.168.0.10,255.255.255.0
;     nic#_default_gateway# (OPTIONAL. Default gateway of the network adapter)
;         - the value must be in the form of: #.#.#.#
;           i.e.: 192.168.0.1
;     nic#_dns_servers (OPTIONAL. Set DNS servers of network adapter)
;         - the value must be in the form of: #.#.#.#,#.#.#.#
;           i.e.: 192.168.0.10,192.168.0.11
;     nic#_link_speed (OPTIONAL. Set the link speed of the network adapter)
;         - Before using this option. Make sure that the network adapter supports link speed setting
;           This is really a registry change for the network adapter.  The registry name is *SpeedDuplex
;           The value for *SpeedDuplex is usually a digit ranging from 0-5.
;           Here's an example:
;              0 - Auto Negotiate
;              1 - 10Mbps Half Duplex
;              2 - 10Mbps Full Duplex
;              3 - 100Mpbs Half Duplex
;              4 - 100Mbps Full Duplex
;              6 - 1Gpbs Full Duplex
;           There's no 5 defined because there's no 1Gpbs Half Duplex
;           IMPORTANT: The above example was taken from a Intel network card.  These numbers could
;           mean something else different from one network card to the next. Refer to the network
;           adapter's manufacturer manual for the actual numbers and their meanings.
;
;     nic#_enable_dhcp (OPTIONAL. Set network adapter to use DHCP)
;         - the value must be either: true/false
;         - if this is set to true, all the other settings above, except link speed, will be ignored
;           this will effectively set IP and DNS Servers to be obtained automatically
;
;    Example 1:
;      nic1_pci_location = 0,25, 0
;      nic1_link_speed = 2
;      nic1_adapter_name = My Connection
;      nic1_enable_dhcp = false
;      nic1_ip_and_subnet = 192.168.0.10 , 255.255.255.0
;      nic1_default_gateway = 192.168.0.1
;      nic1_dns_servers = 192.168.0.5, 192.168.0.6
;
; ******************************************************************************************************************************
[Network_Interface_Cards]



; ******************************************************************************************************************************
; THIS SECTION IS OPTIONAL
; ******************************************************************************************************************************
; This section is used to remove/delete various files or folders
; 
; Possible keys:
;    item (REQUIRED.  This is either a file or folder to be removed)
;
; If the item is a folder, user has the option to specify whether or not to delete the folder recursively. To specify to delete
; a folder recursively, add the word "recursive" right after the path separated by a comma
;    
; The path can also include user desktop path or temporary folder
;    for desktop path, use macro: {user_desktop}
;    for temporary folder, use macro: {user_temp_folder}
;    
; Example 1 - Delete a file:
;   item = A:\test\test.hpp 
;
; Example 2 - Delete a folder recursively:
;   item = A:\test\test2,recursive
;
; Example 3 - Delete only the files contained in the folder:
;   item = A:\test\test2
;
; Example 4 - Delete a folder on the user's desktop:
;   item = {user_desktop}\test2
;
; Example 5 - Delete a folder in the user's temporary folder
;   item = {user_temp_folder}\test2
; ******************************************************************************************************************************
[Files_Folders_Removal]

; ******************************************************************************************************************************
; THIS SECTION IS OPTIONAL
; ******************************************************************************************************************************
; This section is used to copy various packages of files from a source location to destination location
; Each XML file contains at least 1 package of files. Each file has a source and destination locations
; Key name can be anything
; Value must a be a path to a XML file
; 
; example 1:
;    file_package = package1.xml
; ******************************************************************************************************************************
[Files_Transfer_Packages]
file_package = ..\CTS\file_package.xml

; ******************************************************************************************************************************
; THIS SECTION IS OPTIONAL
; ******************************************************************************************************************************
; Specify all the paths to be created
; Possible keys:
;     path (REQUIRED. Valid path to be created)
;
; example:
;    path1 = C:\DataIIB\data\Block_IB\CV
;    path2 = C:\DataIIB\data\Block_IB\General\Logs
; ******************************************************************************************************************************
[Paths_Creation]
path = C:\ReleaseIB_Engineering\

; ******************************************************************************************************************************
; THIS SECTION IS OPTIONAL
; ******************************************************************************************************************************
; To share a folder, must provide path to a folder.
; Share names are optional as the folder name will be used as the default share name. 
; Any share name defined here will be used as additional share name for its corresponding folder
; The # in "path#" must match in both keys. A folder can have more than one share name. 
; Possible keys:
;     path# (OPTIONAL. A valid path to be shared)
;     path#_additional_share_names (OPTIONAL. Additional share names associated with a path)
;           - Define one or more shares names separated by comma
;     path#_allowed_accounts ( Windows Built-In, local or domain accounts to be added to the permission list for this share with Full Control )
;           - if this is not defined, this network share will be accessible to everyone with Full Control
;           - if defined, the value must be in the following format: 
;             User1,User2,User3 (if more than one account is defined, separate by comma)
;             The account name must either be a built-in window account or local/domain account
;             if the account name is a built-in window account, it can only be one of the following:
;                   - everyone, authenticated users 
;             if the account name is a local/domain account it must be in this format: DOMAIN\UserAccountName
;
; example:
;     path1 = C:\DataIIB\
;     path1_additional_share_names = DataIIB1, DataIIB2
;     path1_allowed_accounts = Authenticated Users,US\1117637
;     path2 = C:\DataIA
;     path2__additional_share_names = DataIA_1
;     path2_allowed_accounts = MYCOMPUTERNAME\Duc
;     path3 = C:\DataIC
; ******************************************************************************************************************************
[Paths_Sharing]


; ******************************************************************************************************************************
; THIS SECTION IS OPTIONAL
; ******************************************************************************************************************************
; Create windows system environment variables
; the key would be the system environment variable name.
;
; Note:
;    Any key defined here will have its valued replaced, except for "path" because path is a window's system environment variable
;    If a key's name is path, the value specified will be appendeding to existing value
;    
;    path can have one or more values separated by commas
;    Example:
;       path = C:\folder1
;       path = C:\folder1, C:\folder2
; ******************************************************************************************************************************
[Env_Variables]
SM3_SEEKER = C:\Development\GUTS\SM3
; the address of the computer where all the data of each test is saved before being pushed to the network
SM3_SKR_SERVER = localhost
; the address of the computer where all test data are pushed to after testing
SM3_SKR_NETWORK = localhost
path = C:\Perl\bin\

; ******************************************************************************************************************************
; THIS SECTION IS OPTIONAL
; ******************************************************************************************************************************
; Add/Modify or Delete registry's key
;
; Possible keys:
;     reg#_action ( REQUIRED. What action to perform)
;         - there are only 2 actions ( add/modify, delete)
;     reg#_path (REQUIRED. Registry folder path, not including valuename)
;     reg#_type (REQUIRED)
;         - there are only three options for this key ( classes_root, current_user, local_machine)
;     reg#_name_value_pair# (Optional.  Registry name values and their names)
;         - the registry key defined by registry path can have multiple value names and their associated values
;         - Format of the value: [name:***,value:***,type:***] - replace *** with actual text
;                - name can be anything
;                - value is either numeric or alphanumeric depending on type
;                - type can only be 1 of 4: string, multi_string, dword, qword
;                  If type is dword or qword then value can only be numeric
;                  If type is multi-string, then format of the value must be:
;                       [name:***,:value:***:value:***...,type:multi_string]
;
;    Example 1:
;         reg1_action = add/modify
;         reg1_path = SOFTWARE\MySoftware\
;         reg1_type = local_machine
;         reg1_name_value_pair1 = [name:Version,value:3,type:string]
;         reg1_name_value_pair2 = [name:Version2,:value:3:value:34,type:multi-string]
;
;    Example 2:
;         reg1_action = add/modify
;         reg1_path = SOFTWARE\Duc\Sup
;         reg1_type = local_machine
;
;    Example3:
;         reg1_action = delete
;         reg1_path = SOFTWARE\Duc\Sup
;         reg1_type = local_machine
;         reg1_name_value_pair1 = [name:Version]
;
;    Example4:
;         reg1_action = delete
;         reg1_path = SOFTWARE\Duc\Sup
;         reg1_type = local_machine
; ******************************************************************************************************************************
[Windows_Registry]
;reg1_action = delete
;reg1_path = SOFTWARE\Duc\
;reg1_type = local_machine
;reg1_name_value_pairs = Versionn[:]3[,]ginrl[:]boy

; ******************************************************************************************************************************
; THIS SECTION IS OPTIONAL
; ******************************************************************************************************************************
; Create shortcuts on the user's desktop
;
; example:
;   shortcut1_name = Data Server
;   shortcut1_target_path = C:\ReleaseIB_Production\app.exe
;   shortcut1_arguments = -role datasrv -suite lsps3 -production
; ******************************************************************************************************************************
[Windows_Shortcuts]
