Waxxh's Blog

Win10系统 软件无法随系统自启动的问题

大多数时候,我们都是禁止软件随系统自启动,以免占用系统资源,拖慢系统启动速度。但有些时候,一些好用、需要常驻的工具软件我们却希望它们随系统自启动,带来方便与快捷,比如截图、翻译、邮箱等软件。然而在 Win10 系统以管理员身份运行的软件却没法通过正常的方式让它随系统自启动。

软件设置开机自启动的方式一般有两种,第一种是直接把想要自启动的软件的快捷方式丢到 C盘的启动文件夹里,例如全路径:C:\用户\你的账号名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

AppData 文件夹是隐藏的,需要把文件浏览窗口——查看——隐藏的项目 勾选上了才显示。

第二种是设置注册表 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run ,手动设置的话是新建一个字符串值,把想要自启动的软件 exe 路径粘贴到数值数据那保存了就好,如果需要最小化显示在任务栏,在后边加上 -min 参数。

软件自带的随系统自启动功能大多也是通过这种方式实现的,比如 Qt 是使用 QSettings 实现:

void MainWindow::on_checkBox_clicked(bool checked)
{
    const QString regPath="HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run";
    QString appPath = QApplication::applicationFilePath().replace("/", "\\");//获取软件完整目录,替换/为\\,转义后为正确路径形式
    QString appName = QApplication::applicationName();//获取软件名称,不获取也行,后边自行设置名称
    QSettings settings(regPath,QSettings::NativeFormat);  //需要 #include <QSettings>
    if(checked)
        settings.setValue(appName, appPath);//写入注册表
    else
        settings.setValue(appName, "");//取消勾选则设置数值数据为空,即不自启动
}

最后问题来了,以管理员身份运行的软件通过这两种方式也无法自启,大概是因为 UAC(User Account Control,用户帐户控制)的原因,Win8 及之后的版本,微软为了提高系统安全,对系统做了许多限制。那就手动解决一下吧,我们还可以通过批处理脚本或 vbs脚本解决无法自启动问题。

(1)使用批处理脚本解决,缺点是每次开机会产生一闪而过的黑框框,不美观。新建一个文本文档,添加启动软件命令,要启动多个软件就依葫芦画瓢多放几行命令:

start /d "D:\Tools\Snipaste" Snipaste.exe

保存,记得另存为看看是否默认显示编码为 ANSI ,如果不是就需要另存为 ANSI 了,不然会乱码也会导致命令无法执行。

然后把 xxx.txt 重命名为 .bat 后缀,需要把文件浏览窗口——查看——文件拓展名 勾选上了才显示并能更改后缀。
最后如方式一把它丢到C盘的启动文件夹里就OK了。

(2)使用 vbs 脚本解决,没有黑框框,缺点是可能导致有些软件保存的设置失效恢复了默认,视软件而定。一样是新建一个文本文档,添加启动软件命令,多个文件则多个 ws.run... ,一样需要另存为确定是否为 ANSI 编码,然后重命名为 .vbs 后缀,最后也丢到C盘的启动文件夹里:

Set ws = CreateObject("Wscript.Shell")
ws.run "D://Tools//SnipasteX64//Snipaste.exe",vbhide
ws.run "D://Tools//其他软件1.exe",vbhide
ws.run "D://Tools//其他软件2.exe",vbhide

如果使用方法(2)导致软件保存的设置失效恢复了默认,只能采用套娃的方法了:
使用(2)vbs 脚本启动批处理脚本 .bat,然后再使用(1)批处理脚本启动软件,只需要把 vbs 脚本丢到C盘的启动文件夹里。

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »