如何保护群晖NAS中的AutoHotkey自动化热键脚本程序源代码 2023年4月8日
通过RaiDrive_v1.5.3.1或者Mountain Duck或者WebDrive或者NetDrive2或者Synology Drive Client异地远程连接群晖NAS的SFTP或者WebDAV文件服务并映射网络驱动器之后(公网IP地址、DDNS动态域名解析、端口转发)我们可以在网络驱动器中直接运行AutoHotkey自动化热键脚本程序并自动静默智能安装应用程序软件,执行预设程序,实现一系列功能,完成一系列任务,达到一系列目的。
小偷偷盗、硬盘损坏、服务器设备损毁、停电、宕机、网络故障、用户误操作、非法入侵、自然灾害、战争、硬件或软件的故障、数据损坏、勒索病毒攻击,或只是误删等,都可能造成大量数据丢失,都有可能无法访问存放在群晖NAS中的AutoHotkey自动化热键脚本,并丢失AutoHotkey自动化热键脚本。。数据备份可以在发生意外状况时提供安全保障。
通过定制304不锈钢厚钢板NAS保护配电箱、Cloud Sync自动实时单向同步、Hyper Backup和Snapshot Replication定时单向多版本复制备份、UPS不断电系统、线径1.5的减振降噪弹簧垫子等各种措施可以有效的防止丢失存放在群晖NAS中的AutoHotkey自动化热键脚本,保持存放在群晖NAS中的AutoHotkey自动化热键脚本长期可用。
考虑到资金、必要性和脚本重要程度等因素,我暂时不打算使用Synology High Availability 高可用集群。
rem E:\Build\Autorun-Hotkey-Lnk\一键打包成单文件程序\一键打包成单文件程序.bat
rem Prog-SS-中的SS 是 Silent Setup 的简写,表示静默全自动安装
if exist "C:\Program Files (x86)\WinRAR\WinRAR.exe" (
"C:\Program Files (x86)\WinRAR\WinRAR.exe" a -ag__YYYY.MM.DD_HH-MM-SS -iiconico.ico -m5 -r -sfx -z%~dp0自解压脚本命令.txt %~dp0Prog-SS-.exe %~dp0..\*.*
)else (
"C:\Program Files\WinRAR\WinRAR.exe" a -ag__YYYY.MM.DD_HH-MM-SS -iiconico.ico -m5 -r -sfx -z%~dp0自解压脚本命令.txt %~dp0Prog-SS-.exe %~dp0..\*.*)
exit
; E:\Build\Autorun-Hotkey-Lnk\一键打包成单文件便携可执行程序\自解压脚本命令.txt
;下面的注释包含自解压脚本命令
;Path=解压缩路径
;Presetup=解压缩前运行
;Setup=解压缩后运行,可以输入多行Setup=一起执行
;Silent=静默方式:1-隐藏全部 2-隐藏启动对话框 空着不设置-显示全部
;Overwrite=覆盖方式:1-覆盖全部文件 2-跳过已存在的文件 空着不设置-覆盖前询问
;请选择正确的图标并保存正确的配置文件
Path=C:\Prog\LockNote
Setup=C:\Prog\LockNote\AutoCloseLock-Note.exe
Setup=C:\Prog\LockNote\AutoCloseLock-Note-2.exe
Silent=2
Overwrite=2
;当此脚本已经运行时自动替换旧实例再次运行。
#SingleInstance,force
;让脚本持久运行(即直到用户关闭或遇到 ExitApp)。
#Persistent
;用强制的方法激活窗口。阻止任务栏按钮的闪烁.
#WinActivateForce
;不显示托盘图标。
; #NoTrayIcon
;不检查空变量是否为环境变量(建议所有新脚本使用)。
#NoEnv
SetTimer,AutoCloseLockNote,500
Run,%A_ScriptDir%\LockNote.exe,%A_ScriptDir%
return
AutoCloseLockNote()
{
;超时毫秒数,55秒*1000毫秒/秒=50000毫秒, 1秒 = 1000毫秒
;A_TimeIdlePhysical表示从系统最后一次接收到键盘,
;鼠标或其他输入后所经过的毫秒数. 这可以用来判断用户是否离开.
if(A_TimeIdlePhysical>55000)
{
loop,50
{
;等待指定标题窗口出现
; WinWait, LockNote - Steganos LockNote ahk_class ATL:0044B1A0 ahk_exe LockNote.exe
;设置脚本可以“看见”隐藏的窗口。
DetectHiddenWindows,On
;窗口标题匹配模式改成某个位置必须包含WinTitle。
SetTitleMatchMode,2
WinClose, LockNote
WinClose, ahk_exe LockNote.exe
WinKill, LockNote
WinKill, ahk_exe LockNote.exe
Process,Close,LockNote.exe
}
SetTimer,AutoCloseLockNote,Delete
ExitApp
}
}
;当此脚本已经运行时自动替换旧实例再次运行。
#SingleInstance,force
;让脚本持久运行(即直到用户关闭或遇到 ExitApp)。
#Persistent
;用强制的方法激活窗口。阻止任务栏按钮的闪烁.
#WinActivateForce
;不显示托盘图标。
; #NoTrayIcon
;不检查空变量是否为环境变量(建议所有新脚本使用)。
#NoEnv
SetTimer,AutoCloseLockNote2,600
; Run,%A_ScriptDir%\LockNote.exe,%A_ScriptDir%
return
AutoCloseLockNote2()
{
;超时毫秒数,50秒*1000毫秒/秒=50000毫秒, 1秒 = 1000毫秒
;A_TimeIdlePhysical表示从系统最后一次接收到键盘,
;鼠标或其他输入后所经过的毫秒数. 这可以用来判断用户是否离开.
if(A_TimeIdlePhysical>50000)
{
loop,60
{
;等待指定标题窗口出现
; WinWait, LockNote - Steganos LockNote ahk_class ATL:0044B1A0 ahk_exe LockNote.exe
;设置脚本可以“看见”隐藏的窗口。
DetectHiddenWindows,On
;窗口标题匹配模式改成某个位置必须包含WinTitle。
SetTitleMatchMode,2
WinClose, LockNote
WinClose, ahk_exe LockNote.exe
WinKill, LockNote
WinKill, ahk_exe LockNote.exe
Process,Close,LockNote.exe
}
SetTimer,AutoCloseLockNote2,Delete
ExitApp
}
}
program LoginSyno;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ShellAPI, ExtCtrls;
type
TForm1 = class(TForm)
edtPwd: TEdit;
tmr1: TTimer;
procedure tmr1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.tmr1Timer(Sender: TObject);
begin
if edtPwd.Text = 'xuxl6188' then
begin
ShellExecute(handle, 'open', 'C:\Prog\WinSCP\WinSCP.exe', 'smb-sftp-usr-2-A_N.9_H.4-end:s_m_b_s_f_t_p-p_w_d_-.g2-66-n-end@abcde.myds.me:49826 /Desktop /UploadIfAny', 'C:\Prog\WinSCP', SW_SHOWNORMAL);
Application.Terminate;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Position := poScreenCenter;
end;
end.
; ====== 脚本设置开始 =====
; 不检查空变量是否为环境变量(推荐所有新脚本使用).
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; 启用或禁用可能产生错误的特定状况时的警告, 例如书写错误或缺少全局声明.
; #Warn ; Enable warnings to assist with detecting common errors.
; 让 Send, SendRaw, Click 和 MouseMove/Click/Drag 切换到 SendInput 方法.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
; 改变脚本的当前工作目录. 当前脚本所在目录的绝对路径. 不包含最后的反斜杠(根目录同样如此).
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
; 不显示托盘图标.
#NoTrayIcon
; 决定当脚本已经运行时是否允许它再次运行.Ignore: 跳过对话框并让旧实例继续运行. 换句话说, 试图启动已经运行的脚本会被忽略.
#SingleInstance Ignore
; 设置脚本可以 "看见" 隐藏的窗口.
DetectHiddenWindows,On
; 设置在类似 WinWait 命令中 WinTitle 参数的匹配模式.•2 = 窗口标题的任意位置包含 WinTitle 才能匹配.
SetTitleMatchMode,2
; 让脚本持续运行(即直到用户关闭或遇到 ExitApp).
#Persistent
; ====== 脚本设置结束 =====
SetTimer,WinHideTimer,1000
Hotkey,^!F9,ShowWinSCP
return
WinHideTimer()
{
;超时毫秒数,1分钟*60秒/分钟*1000毫秒/秒=60000毫秒, 1秒 = 1000毫秒
;A_TimeIdlePhysical表示从系统最后一次接收到键盘,
;鼠标或其他输入后所经过的毫秒数. 这可以用来判断用户是否离开.
if(A_TimeIdlePhysical>60000)
{
WinHide,WinSCP
WinHide,ahk_class TScpCommanderForm
WinHide,ahk_exe WinSCP.exe
SetTimer,WinHideTimer,Delete
}
}
;
ShowWinSCP()
{
WinShow,WinSCP
WinShow,ahk_class TScpCommanderForm
WinShow,ahk_exe WinSCP.exe
WinActivate,WinSCP
WinActivate,ahk_class TScpCommanderForm
WinActivate,ahk_exe WinSCP.exe
SetTimer,WinHideTimer,1000
}
下面的隐藏内容为空白内容。如果您觉得本文对您有帮助并且愿意支付1积分请点击下面隐藏内容登录并支付积分。
问:为何不使用 RAID 1 镜像存储池(有数据保护)来复制备份AutoHotkey脚本?
答:因为 RAID 1 镜像存储池(有数据保护)出现故障并恢复存储池后有极小概率会出现误恢复数据(在使用一段时间后存储池修复,其中某块硬盘中的老数据覆盖到最近一段时间产生的新数据上,形成数据覆盖,破坏最新数据。 产生数据A,RAID 1 降级后产生数据B,修复存储池后产生数据C,极小概率出现数据A覆盖数据B和数据C造成数据丢失)。
请用西瓜视频搜索关键字“内蒙客户用2块硬盘组装的RAID 1,简单的数据恢复为啥搞不定?”
https://www.ixigua.com/6998079259965293063
问:为何不使用 RAID 5 或者 RAID 6 存储池(有数据保护)来复制备份AutoHotkey脚本?
答:因为RAID 5 在修复存储池时有极小概率会出现存储池损毁,RAID 6 存储池的性能比较差并且有点复杂。
我比较喜欢使用简单易用的 Basic 存储池,1块硬盘对应1个存储池,互不影响,实时单向同步后即使硬盘损坏也不会丢失数据,注意:Cloud Sync实时单向同步时的服务器地址应当填写 https://localhost:49826 表示连接群晖NAS的WebDAV Server服务器本地文件服务,实时单向同步文件到本地硬盘中。对硬盘容量没有要求,对硬盘插入顺序没有要求,硬盘挂载到Windows或者Linux系统中数据恢复数据提取相对简单(无RAID、无校验冗余数据、无互相依赖关系,简简单单,明明白白,干干净净)。
请用西瓜视频搜索关键字“内蒙客户用2块硬盘组装的RAID 1,简单的数据恢复为啥搞不定?”
https://www.ixigua.com/6998079259965293063
异地备份容灾
https://www.synology.cn/zh-cn/dsm/solution/data_backup
https://mountainduck.io/