设为首页 收藏本站
查看: 734|回复: 0

[经验分享] Qt5 windows开机启动

[复制链接]

尚未签到

发表于 2018-6-20 06:34:32 | 显示全部楼层 |阅读模式
  为什么通过注册表设置开机启动的程序运行目录全是 system32?
  写了个程序在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 里面添加了开机启动项(正常工作),但蛋疼的事情发生了,开机自动启动的程序所在的工作目录不是可执行文件所在目录而是system32...结果直接通过".\\xxx.exe"的方式对可执行文件同一目录下程序的调用就会因找不到文件而失败。
  求解释求解救TAT
  答:是的,注册表里面的启动项,工作目录估计继承了父进程的工作目录,也就是system32目录了。
  解决办法也比较简单:
  1 如果程序是你写的,自己做工作目录的调整就行了,好像是SetCurrent**Directry什么的,你查一下。
  2 如果程序不是你写的,有个简单的做法,给这个程序做个快捷方式,在快捷方式中设置起此目录,再把这个快捷方式作为启动项写进注册表就行了
修改工作目录

  •   你很少需要这个操作如果你用到了,请注意
  bool QDir::setCurrent ( const QString & path ) [static]

  •   而不是
  bool QDir::cd ( const QString & dirName ) bool QDir::cdUp () void QDir::setPath ( const QString & path )
  方法1: 在程序代码里设置当前运行的目录。但是这个方法只能适用于固定安装目录的软件
  方法2: 这个简单的方法就是保证桌面的快捷方式不能被修改,如果被修改了,开机启动也起不来
  获取当前桌面路径的方法:
  QString desktop_path = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
  上面的方法会遇到
  管理员权限的问题
  开机启动和双击桌面快捷方式打开的目录不同
  方法3: 使用dos命令的方式

  •   在安装目录下创建一个后台启动的bat或js文件
  •   设置注册表启动项值为上个步骤生成的bat或js文件的路径
  Test.bat文件的内容:
  @echo off
  color 0a
  set base_dir=%~dp0
  %base_dir:~0,2%
  pushd %base_dir%
  "D:\Rt\body-detect.exe"
  hiderun.js文件的内容:
  new ActiveXObject('WScript.Shell').Run('cmd /c D:/Rt/Test.bat',0);
  其中D:/test.bat是你的批处理路径
  方法4: 使用vbs方式
  start.vbs的内容:(带空格的路径的解决办法)
  Set ws = CreateObject("WScript.Shell")
  path=chr(34)&"D:\Rt\Test .bat"&chr(34)
  ws.run path,vbhide
  方式5: 使用bat调用js文件
  CScript "C:/Program Files/RT600/hiderun.js"
  下面来几个高手整理的
  几种隐藏批处理运行窗口的方法 .
  (1)通过批处理命令实现。缺点:会看到一个窗口一闪而逝。优点:简单,直接添加即可。
  复制代码代码如下:
  @echo off
  if "%1"=="h" goto begin
  start mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
  :begin
  ::以下为正常批处理命令,不可含有pause set/p等交互命令
  pause
  (2)利用vbs脚本实现隐藏。缺点:调用麻烦点。优点:基本看不到痕迹(非绝对的,指一般用户)
  HideRun.vbs
  复制代码代码如下:
  CreateObject("WScript.Shell").Run "cmd /c D:/test.bat",0
  其中D:/test.bat是你的批处理路径
  .....................................................................................................................................
  另一思路为把bat转换成vbs,然后vbs生成一个临时bat文件,然后WScript.Shell.Run隐藏启动这个临时bat。
  HideRun.bat
  复制代码代码如下:
  echo CreateObject("WScript.Shell").Run "cmd /c D:/test.bat",0>$tmp.vbs
  cscript.exe /e:vbscript $tmp.vbs
  del $tmp.vbs
  这个批处理其实不能使其批处理本身隐藏,但是下面大部分隐藏调用批处理的原理和基础。
  HideRun.js
  复制代码代码如下:
  new ActiveXObject('WScript.Shell').Run('cmd /c D:/Test.bat',0);
  用Javascript有什么好处呢?js的字符串变量可以用单引号,从而方便命令行作为参数调用,而且js很好的支持多行语句用 ; 分隔写成一行。要注意的是:js要区分大小写,方法
  必须用括号,结尾必须有分号。所以就成了下面的命令:
  复制代码代码如下:
  mshta "javascript:new ActiveXObject('WScript.Shell').Run('cmd /c D:/test.bat',0);window.close()"
  通常系统管理员会向用户端推送一些脚本并运行,或者拷贝批处理文件到客户端由用户自己运行。但是大部分脚本在运行时会弹出黑色背景的DOS窗口,这会让不少用户不知所
  措,甚至误操作关闭正在运行的窗口。好在批处理文件的DOS窗口是可以隐藏的,以下是几种隐藏批处理运行窗口的方法。
  1.基础
  HideRun.vbs
  CreateObject("WScript.Shell").Run "cmd /c D:/test.bat",0
  其中D:/test.bat是你的批处理路径
  另一思路为把bat转换成vbs,然后vbs生成一个临时bat文件,然后WScript.Shell.Run隐藏启动这个临时bat。
  HideRun.bat
  复制代码代码如下:
  echo CreateObject("WScript.Shell").Run "cmd /c D:/test.bat",0>$tmp.vbs
  cscript.exe /e:vbscript $tmp.vbs
  del $tmp.vbs
  这个批处理其实不能使其批处理本身隐藏,但是下面大部分隐藏调用批处理的原理和基础。
  HideRun.js
  new ActiveXObject('WScript.Shell').Run('cmd /c D:/Test.bat',0);
  用Javascript有什么好处呢?js的字符串变量可以用单引号,从而方便命令行作为参数调用,而且js很好的支持多行语句用 ; 分隔写成一行。要注意的是:js要区分大小写,方法
  必须用括号,结尾必须有分号。所以就成了下面的命令:
  mshta "javascript:new ActiveXObject('WScript.Shell').Run('cmd /c D:/test.bat',0);window.close()"
  2.用快捷方式
  如果要使一个批处理本身隐藏,可以参考附件里的一个快捷方式,修改附件中的相关路径即可隐藏启动你的批处理。可以用vbs来建立一个 .lnk,其实用批处理也行(先echo一个
  vbs出来)
  3.利用系统服务
  可以建立一个系统服务然后启动这个服务来启动批处理。缺点是启动服务较慢,需要管理员权限
  runa***v add /cmdline:"C:/Windows/System32/cmd.exe /c D:/test.bat" /name:"mysrv"
  net start mysrv
  4.利用at计划任务
  用at可以建立一个计划任务,在不输入 /interactive 参数可以后台运行。但是建使用at必须有管理员权限
  at 09:10 "cmd /c D:/Test.bat"
  然后在 9:10 系统就会自动后台以SYSTEM权限运行这个bat
  5.利用ftype文件关联
  ftype batfile=C:/Windows/System32/mshta "javascript:new ActiveXObject('WScript.Shell').Run('cmd /c%1',0);window.close();"
  6.其他用户
  Windows 2k/XP支持多用户,如果能在后台登陆另一个账户的桌面然后运行一个批处理,就能完全达到隐藏的目的
  7.编译成可执行文件
  不少方法可以实现,可以直接利用的工具有 Quick Batch file compiler。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-526020-1-1.html 上篇帖子: win7-windows update失败 下篇帖子: Windows AD残留信息手动清除
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表