Sample script for managing system settings.
Add a folder to the Path
This script will intelligently add a new folder to the Path environment variable.
This script uses the ‘Environment’ and the ‘Registry’ services.
'<ScenseScriptHeader>
' <ScriptParameters>
' <Parameter Name="Operation" ScriptVariableName="vOperation">
' <GUI Control="DropdownList">
' <ListElements>
' <Element Name="Add" />
' <Element Name="Remove" />
' </ListElements>
' </GUI>
' </Parameter>
' <Parameter Name="Folder Name" ScriptVariableName="vPath">
' <GUI Control="TextBox" />
' </Parameter>
' </ScriptParameters>
'</ScenseScriptHeader>
'<ParameterCodeBlock>
vOperation = "Add"
vPath = "c:\SomePath"
'</ParameterCodeBlock>vOperation = "Add"
vPath = "c:\SomePath"
'
' *******************************************************
' Description : Add or remove a folder to/from the user path
' *******************************************************
Sub Scense_Main()
Dim NewPath
Dim HKCU
Dim REGSZ
Dim HKEY
HKCU = &H80000001
HKLM = &H80000002
REGSZ = &H00000001
Scense.WriteScenseLog "Start: " & vOperation & " Folder '" & vPath & "' to PATH (User)"
If vOperation = "Add" Then
'ADD a folder to the path
With Environment
.EnvironmentType = 1 'User
.EnvironmentVar = "PATH"
.EnvironmentVal = Empty
If .GetEnvironmentVar Then
Scense.WriteScenseLog "Current PATH: " & .EnvironmentVal
If InStr(1, .EnvironmentVal, vPath , vbTextCompare) > 0 Then
'Already in path
Scense.WriteScenseLog "Path was already set..."
Else
'Not in path -> Update current process first
.EnvironmentVal = .EnvironmentVal & ";" & vPath
.SetEnvironmentVar
'Update the registry
'Handle HKCU ---------------------------------------------------
If Registry.GetKeyValue(, HKCU, "Environment", "Path") Then
If InStr(1, Registry.KeyValue, vPath , vbTextCompare) > 0 Then
Scense.WriteScenseLog "Already in registry -> " & "just activate"
'Already in registry (CurrentUser) -> just activate
Call .ActivateEnvironmentVar
Scense.WriteScenseLog "Path was updated..."
Else
Scense.WriteScenseLog "NOT in registry -> " & "Add and activate"
If Not Registry.WriteKeyValue(, HKCU, "Environment", "Path", Registry.KeyValue & ";" & vPath , REGSZ) Then
Scense.WriteScenseLog "Unable to write the" & " environment to the registry. (" & Registry.ResultCode & ") " & Registry.Result
Else
'Activate new environment value
Call .ActivateEnvironmentVar
Scense.WriteScenseLog "Path was updated..."
End If
End If
Else
Scense.WriteScenseLog "NOT in registry -> " & "Create and activate"
If Not Registry.WriteKeyValue(, HKCU, "Environment", "Path", vPath , REGSZ) Then
Scense.WriteScenseLog "Unable to write the" & " environment to the registry. (" & Registry.ResultCode & ") " & Registry.Result
Else
'Activate new environment value
Call .ActivateEnvironmentVar
Scense.WriteScenseLog "Path was updated..."
End If
End If
End If
Else
Scense.WriteScenseLog "Unable to retrieve the environment" & " variable PATH"
End If
End With
Scense.WriteScenseLog "Stop: Add Folder '" & vPath & "' to PATH"
Else
'REMOVE a folder from the path
With Environment
.EnvironmentType = 1 'User
.EnvironmentVar = "PATH"
.EnvironmentVal = Empty
If Registry.GetKeyValue(, HKCU, "Environment", "Path") Then
Scense.WriteScenseLog "Old PATH: " & Registry.KeyValue
TempArray = Split(Registry.KeyValue, ";")
TempString = ""
For i = LBound(TempArray) To UBound(TempArray)
If StrComp(TempArray(i), vPath , vbTextCompare) <> 0 Then
TempString = TempString & TempArray(i) & ";"
End If
Next
If Len(TempString) > 0 Then
'Remove the last ;
TempString = Left(TempString, Len(TempString)- 1)
End If
.EnvironmentVal = TempString
.SetEnvironmentVar
'Update the registry
If Registry.GetKeyValue(, HKCU, "Environment", "Path") Then
If InStr(1, Registry.KeyValue, vPath , vbTextCompare) = 0 Then
Scense.WriteScenseLog "NOT in registry -> Just activate"
Call .ActivateEnvironmentVar
Scense.WriteScenseLog "Just activate"
Else
Scense.WriteScenseLog "In registry -> Remove and activate"
If Not Registry.WriteKeyValue(, HKCU, "Environment", "Path", .EnvironmentVal, REGSZ) Then
Scense.WriteScenseLog "Unable to write the" & " environment to the registry. (" & Registry.ResultCode & ") " & _
Registry.Result
Else
'Activate new environment value
Call .ActivateEnvironmentVar
Scense.WriteScenseLog "Path was updated: " & vPath & " was removed!"
End If
End If
End If
Else
Scense.WriteScenseLog "Path was not set!"
End If
End With
Scense.WriteScenseLog "Stop: Remove Folder '" & vPath & "' from PATH"
End If
End Sub