我希望实现SCITE的用户目录自定义,以实现完全的配置与程序文件便携化,也就是完全不依赖外部的任何定义方式。只要将配置与程序文件打包后就可以使用(并非完全如此,至少换环境时还是需要改下配置文件中的路径的)。
SCITE 的配置文件查找顺序.
查看SCITE官方的帮助文件,可以发现其使用变量SciteUserHome存储用户配置的位置。而且指出
There are some variables set by the environment to access the name of the current file as well The SciteDefaultHome and SciteUserHome variables are protected and can not be set in local or directory options.
也就是说显然不能在配置文件中进行指定了,而且可以理解,你不能在配置文件读取之前知道里面SciteUserHome的值并设定目录,这是做不到的。但是可以在环境变量中设定。但我不想让这个设置污染我的系统环境变量,所以还需要优化。
所以现在问题简单了,需要在启动程序时,通过不经过系统环境变量的方式设置程序运行环境的环境变量值。
启动时设置环境变量
可以通过命令行临时设置环境变量并启动以绕开该限制。但是命令行会导致打开时有黑色命令行窗口。我希望能够以完全无副作用的方式完成这一点。所以我选中的是vbs脚本。只需要在无弹窗的vbs脚本里面定义变量并启动scite就可以了。
换了文件夹或者打包重新发布时,只需要在解压到位后,重新修改vbs里面定义的路径变量的值就可以了。
全套的vbs脚本如下
LaunchSciTE.vbs
' ==================================================
' 无黑窗启动 SciTE 的 VBScript 脚本 (支持参数传递)
' ==================================================
' 创建一个用于操作系统的外壳对象
Set objShell = CreateObject("WScript.Shell")
' 定义 SciTE 的根目录,方便修改
Dim sciTeUserHome
sciTeUserHome = "C:\Users\admin\Portable\wscite577"
' 根据你自己的需要,定义 SciTE 的根目录,方便修改
' 相应的,你也需要根据你自己的需要做出修改,而不是沿用我们现在的
' 1. 设置环境变量 (这只对即将启动的SciTE进程有效)
' 这等同于批处理中的: set SciTE_USERHOME=...
objShell.Environment("Process")("SciTE_USERHOME") = sciTeUserHome
' 2. 设置工作目录
' 这等同于批处理中的: cd /d ...
Dim sciTeWorkDir
sciTeWorkDir = sciTeUserHome & "\wscite"
objShell.CurrentDirectory = sciTeWorkDir
' 3. 构建要执行的完整命令
' 首先,定义基础的可执行文件
Dim strCommand
strCommand = "SciTE.exe"
' 然后,检查是否有参数传递给本 VBScript 脚本
If WScript.Arguments.Count > 0 Then
' 如果有参数,就遍历所有传入的参数
Dim arg
For Each arg In WScript.Arguments
' 将每个参数用双引号包裹 (以正确处理带空格的路径),然后拼接到命令后面
' 例如,最终命令会变成: SciTE.exe "C:\My Documents\file.txt"
strCommand = strCommand & " " & """" & arg & """"
Next
End If
' 4. 运行构建好的完整命令 (带有参数的 SciTE.exe)
' 参数 "1" 表示以正常窗口大小显示
' 参数 "False" 表示脚本不用等待SciTE关闭,启动后立刻退出
objShell.Run strCommand, 1, False
' 释放对象
Set objShell = Nothing