Xshell7/Xftp7 解决强制更新问题:要继续使用此程序,您必须应用最新的更新或使用最新版本

文章目录

    • 一、背景
    • 二、解决方案
      • 方案一:重新安装(推荐)
      • 方案二:修改`nslicense.dll`文件(不推荐)
      • 方案三:修改系统时间(可选)
        • `Xshell.bat`
        • `Xftp.bat`
    • 三、总结

一、背景

Xshell7/Xftp7 有一段时间没有使用了,今天打开时提示更新【要继续使用此程序,您必须应用最新的更新或使用最新版本】,然后点击"确认"后,等一会儿后提示不需要更新【您已经在系统上安装了最新版本的Xshell7】???Xshell7/Xftp7 解决强制更新问题:要继续使用此程序,您必须应用最新的更新或使用最新版本_第1张图片
Xshell7/Xftp7 解决强制更新问题:要继续使用此程序,您必须应用最新的更新或使用最新版本_第2张图片
我使用的是 家庭School版本

二、解决方案

方案一:重新安装(推荐)

从官网 free-for-home-school 看到这样一段声明
【更新:从 2022/02/16 开始,我们的免费许可证的标签限制已被删除。所有免费用户现在都可以通过下载下面的最新版本来访问无限的标签。当前用户必须下载最新版本并在现有安装上进行安装。】
Xshell7/Xftp7 解决强制更新问题:要继续使用此程序,您必须应用最新的更新或使用最新版本_第3张图片
也就是说,2022-02-16 之前下载安装的家庭School版本都有上述强制更新失败的问题。
解决方案官网已经给出了:下载最新版本并在现有安装上进行安装。
这里就不演示了。

方案二:修改nslicense.dll文件(不推荐)

网上说的修改这个文件,使用十六进制文件编辑器(比如:HxD - Freeware Hex Editor and Disk Editor),搜索下边的字节序列,将0F 86 改为 0F 83

版本5的十六进制串为:7F 0C 81 F9 80 33 E1 01 0F 86 80
版本6的十六进制串为:7F 0C 81 F9 80 33 E1 01 0F 86 81
版本7的十六进制串为:7F 0C 81 F9 80 33 E1 01 0F 86 82

参考资料:https://zhuanlan.zhihu.com/p/513349949
同大多数网友一样,我也没有搜到上述有关的字节序列,网上也有直接提供nslicense.dll文件的,但也不适用,使用不匹配的nslicense.dll有可能会造成程序崩溃。因此不推荐方案二。

方案三:修改系统时间(可选)

将操作系统日期修改为Xshell.exe/Xftp.exe程序创建时间,然后启动Xshell/Xftp即可
(确切来说只要满足【操作系统日期<Xshell.exe/Xftp.exe程序创建时间+1年】均可。 比如,我的Xshell.exe程序的创建时间:2021‎月‎7‎月‎22‎日,‏‎12:24:58,那么系统修改后的日期只要早于:2022年‎7‎月‎22‎日,‏‎12:24:58,即可。亲测早于创建时间也可行)

Xshell.bat

下边是我参考网上的资料优化后的Xshell.bat批处理脚本:

@echo off
color 3e
title Xshell启动器
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c "^&chr(34)^&"%~0"^&chr(34)^&" ::","%cd%","runas",1)(window.close)&&exit

::获取Xshell启动程序路径
::set Xshell="D:\Program Files (x86)\NetSarang\Xshell 7\Xshell.exe"
set Xshell=
::如果上边未设置Xshell变量值,那么会自动去查找当前已安装的Xshell路径
if not defined Xshell (
	for /F "delims=" %%T in ('where Xshell') do set Xshell="%%T"
)
::如果上边两处都没有得到Xshell路径,那么就由用户手动输入
if not defined Xshell (
	echo 请提供Xshell启动程序路径
	set /P Xshell=
)
if not defined Xshell (
	echo 拜拜我不干了!
	exit
)

::在更改系统日期前,先获取系统当前日期
set cTime=%date:~0,4%-%date:~5,2%-%date:~8,2%
::修改系统日期,这里获取Xshell.exe的创建时间作为设置的系统日期
for /F "delims=" %%S in ('dir ^/TC %Xshell% ^| findstr "Xshell.exe"') do set Ftime=%%S
set fctime=%Ftime:~0,4%-%Ftime:~5,2%-%Ftime:~8,2%
date %fctime%
echo 修改系统日期完成

::启动Xshell程序
start "" %Xshell%
echo 等待Xshell启动中
::等待xshell启动完成
timeout /T 10 /NOBREAK
::ping 0.0.0.0 -n 5> nul
echo Xshell启动完成

::恢复系统日期
echo 恢复系统日期
date %cTime%
::ping 0.0.0.0 -n 5> null

::第二部分,为当前脚本创建.lnk快捷方式,放到用户桌面
::把原有的lnk快捷方式删掉,注意有的是在public桌面,有的是在当前user桌面
if exist "%PUBLIC%\Desktop\Xshell 7.lnk" (del /f /q "%PUBLIC%\Desktop\Xshell 7.lnk")
if exist "%USERPROFILE%\Desktop\Xshell 7.lnk" (del /f /q "%USERPROFILE%\Desktop\Xshell 7.lnk")

::由Xshell.bat创建的快捷方式,不存在才创建
set Desktop=%PUBLIC%\Desktop
if exist %Desktop%\Xshell.lnk goto:EOF
::切换到Xshell.bat脚本所在目录
cd /d %~dp0

::创建一个临时的vbs脚本, 写入以下内容.
::创建一个 wscript.shell 对象.
echo set wshell = WScript.CreateObject("WScript.Shell") > create_shortcut.vbs
::在 vbs 脚本中声明快捷方式路径及名称,放到用户桌面
echo file_lnk = "%Desktop%\Xshell.lnk" >> create_shortcut.vbs
::创建一个 shortcut 对象.
echo set shortcut = wshell.CreateShortcut(file_lnk) >> create_shortcut.vbs
::下面开始设置 shortcut 对象的属性.
::1. 将目标路径设置为当前批处理脚本 Xshell7.bat
echo shortcut.TargetPath = "%cd%\Xshell7.bat" >> create_shortcut.vbs
::2. 为 Xshell.bat 设置参数(当然这里不需要)
:: echo shortcut.Arguments = "A B C" >> create_shortcut.vbs
::3. 将 "Xshell.bat所在目录" 设置为起始目录
::   注意这里双写百分号用来避免百分号被转义 (即双写百分号表示单个 "%").
echo shortcut.WorkingDirectory = "%%cd%%" >> create_shortcut.vbs
::4. 添加快捷方式描述 (可选).
echo shortcut.Description = "Powerful TELNET/SSH terminal emulator" >> create_shortcut.vbs
::5. 添加快捷方式图标 (可选).
echo shortcut.IconLocation = %Xshell% >> create_shortcut.vbs
::6. 保存 vbs 脚本.
echo shortcut.Save >> create_shortcut.vbs

::执行vbs脚本.
cscript create_shortcut.vbs
::删除临时的vbs脚本.
del /f /q create_shortcut.vbs
exit

脚本主要做了以下几件事儿:
1)手动或自动获取Xshell.exe的位置;
2)修改系统日期为Xshell.exe的创建日期;
3)启动Xshell,exe应用程序;
4)恢复系统日期;
5)删除原有的Xshell 7.lnk快捷方式;
6)借助vb语言,为Xshell.bat生成快捷方式Xshell.lnk,并放到公共用户桌面。

生成的Xshell.lnk快捷方式如下:
Xshell7/Xftp7 解决强制更新问题:要继续使用此程序,您必须应用最新的更新或使用最新版本_第4张图片
点击Xshell.lnk快捷方式,即可启动Xshell.exe应用程序。
另外,如果每次启动时,在任务栏有更新弹框,如下:
Xshell7/Xftp7 解决强制更新问题:要继续使用此程序,您必须应用最新的更新或使用最新版本_第5张图片
可以在工具>选项>更新>实时更新取消勾选更新检查时间间隔选项再运行时就没有这个更新提示了。
Xshell7/Xftp7 解决强制更新问题:要继续使用此程序,您必须应用最新的更新或使用最新版本_第6张图片

Xftp.bat

参照Xshell.bat批处理脚本,只需将Xshell改为Xftp相关信息即可

@echo off
color 3e
title Xftp启动器
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c "^&chr(34)^&"%~0"^&chr(34)^&" ::","%cd%","runas",1)(window.close)&&exit

::获取Xftp启动程序路径
set Xftp="D:\Program Files (x86)\NetSarang\Xftp 7\Xftp.exe"
::set Xftp=
::如果上边未设置Xftp变量值,那么会自动去查找当前已安装的Xftp路径
if not defined Xftp (
	for /F "delims=" %%T in ('where Xftp') do set Xftp="%%T"
)
::如果上边两处都没有得到Xftp路径,那么就由用户手动输入
if not defined Xftp (
	echo 请提供Xftp启动程序路径
	set /P Xftp=
)
if not defined Xftp (
	echo 拜拜我不干了!
	exit
)

::在更改系统日期前,先获取系统当前日期
set cTime=%date:~0,4%-%date:~5,2%-%date:~8,2%
::修改系统日期
for /F "delims=" %%S in ('dir ^/TC %Xftp% ^| findstr "Xftp.exe"') do set Ftime=%%S
set fctime=%Ftime:~0,4%-%Ftime:~5,2%-%Ftime:~8,2%
date %fctime%
echo 修改系统日期完成

::启动Xftp程序
start "" %Xftp%
echo 等待Xftp启动中
::等待Xftp启动完成
timeout /T 10 /NOBREAK
::ping 0.0.0.0 -n 5> nul
echo Xftp启动完成

::恢复系统日期
echo 恢复系统日期
date %cTime%
::ping 0.0.0.0 -n 5> null

::第二部分,为当前脚本创建.lnk快捷方式,放到用户桌面
::把原有的lnk快捷方式删掉,注意有的是在public桌面,有的是在当前user桌面
if exist "%PUBLIC%\Desktop\Xftp 7.lnk" (del /f /q "%PUBLIC%\Desktop\Xftp 7.lnk")
if exist "%USERPROFILE%\Desktop\Xftp 7.lnk" (del /f /q "%USERPROFILE%\Desktop\Xftp 7.lnk")

::由Xftp.bat创建的快捷方式,不存在才创建
set Desktop=%PUBLIC%\Desktop
if exist %Desktop%\Xftp.lnk goto:EOF
::切换到Xftp.bat脚本所在目录
cd /d %~dp0

::创建一个临时的vbs脚本, 写入以下内容.
::创建一个 wscript.shell 对象.
echo set wshell = WScript.CreateObject("WScript.Shell") > create_shortcut.vbs
::在 vbs 脚本中声明快捷方式路径及名称,放到用户桌面
echo file_lnk = "%Desktop%\Xftp.lnk" >> create_shortcut.vbs
::创建一个 shortcut 对象.
echo set shortcut = wshell.CreateShortcut(file_lnk) >> create_shortcut.vbs
::下面开始设置 shortcut 对象的属性.
::1. 将目标路径设置为当前批处理脚本 Xftp7.bat
echo shortcut.TargetPath = "%cd%\Xftp7.bat" >> create_shortcut.vbs
::2. 为 Xftp.bat 设置参数(当然这里不需要)
:: echo shortcut.Arguments = "A B C" >> create_shortcut.vbs
::3. 将 "Xftp.bat所在目录" 设置为起始目录
::   注意这里双写百分号用来避免百分号被转义 (即双写百分号表示单个 "%").
echo shortcut.WorkingDirectory = "%%cd%%" >> create_shortcut.vbs
::4. 添加快捷方式描述 (可选).
echo shortcut.Description = "Xftp: Secure file transfer software for MS Windows Platform." >> create_shortcut.vbs
::5. 添加快捷方式图标 (可选).
echo shortcut.IconLocation = %Xftp% >> create_shortcut.vbs
::6. 保存 vbs 脚本.
echo shortcut.Save >> create_shortcut.vbs

::执行vbs脚本.
cscript create_shortcut.vbs
::删除临时的vbs脚本.
del /f /q create_shortcut.vbs
exit

Tips:关闭实时更新同上述Xshell的操作

三、总结

  1. 推荐使用方案一,仅需重新安装,可免去批处理脚本每次启动时的管理员授权弹窗,延时等待弹窗,修改系统时间可能给其他程序带来的影响等等;
  2. 方案二不是普适方案,大多数人可能找不到需要修改的字节序列,比如我就没找到;
  3. 方案一那么好,为啥我又花费那么多精力弄方案三,我只能告诉你我在写这篇文章之前,我都不知道有方案一这么个方案(苦笑.gif),权当练手写批处理脚本了;
  4. 方案三为啥要创建.lnk快捷方式,直接使用.bat放到桌面不行吗?直接把.bat放桌面是可以的。我用.lnk快捷方式,主要就是图Xshell/Xftp的icon比.bat默认icon好看(外貌协会 Hiahiahia…);
  5. 如果使用方案三,别忘了把开始菜单以及其他地方的快捷方式,一并都替换成新生成的快捷方式(上述代码里只有替换了桌面上的快捷方式)。


参考资料:

  • BAT批处理创建文件桌面快捷方式
  • How do I create a shortcut via command-line in Windows?
  • Xshell 7 提示 “要继续使用此程序,您必须应用最新的更新或使用新版本”

你可能感兴趣的:(杂项,Batch,windows,运维,batch)