前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2018-8-23-Process执行路径

2018-8-23-Process执行路径

作者头像
黄腾霄
发布2020-06-10 10:57:50
8910
发布2020-06-10 10:57:50
举报
文章被收录于专栏:黄腾霄的博客

我们可以通过Process开启一个进程,但是如果通过这个进程再开启另一个进程时,就容易发生错误。


##上Demo

1、我们在vscode的目录下,建立一个名为2.bat的脚本,里面输入命令Code.exe打开vscode

2、然后,我们在同一个目录下打开PowerShell ,输入Start-Process .\2.bat通过Process的方式运行这个脚本。

我们发现运行一切正常

那么如果添加RunAs

3、我们现在使用Start-Process .\2.bat -Verb runas 使用管理员方式运行脚本。

我们发现运行不了了。

4、为了确认发现了什么事情,我们在脚本中添加Pause

重新以RunAs方式执行后发现,运行路径竟然是C:WINDOWS\System32

那么自然找不到Code.exe

所以这是一个相对路径的问题。

其他的坑

发现是路径问题后,我们会想那么在打开非当前所在路径的进程时会不会有同样问题呢?

5、我们将PowerShell的当前路径移动到上级目录,然后运行2.bat

可以看到2.bat执行路径仍为PowerShell的当前路径。

同样无法开启Code.exe

结论

##原因

  • ProcessRunAs方式启动进程,执行目录在系统目录,一般为 C:WINDOWS\System32
  • Process以普通方式启动进程,执行目录在当前运行目录,而不在目标进程所在目录。

解决方式

既然知道了问题所在,那么解决方案就很简单了。

  • 将启动的工作目录调整到目标进程的工作目录,以非RunAs方式启动 这种方式可以解决PowerShell的问题,但是如果是在C#中使用,或者必须要求目标进程以管理员权限启动时就很尴尬了。
  • 不要使用相对路径 正解,没问题,杠杠的
  • 设置WorkingDirectory 如果你使用的是第三方软件,而第三方软件已经使用了相对路径。这个几乎就是唯一方案了

这样讲执行目录强制设置为目标进程所在目录,就不会出现相对路径找不到的问题了


本文会经常更新,请阅读原文: https://xinyuehtx.github.io/post/Process%E6%89%A7%E8%A1%8C%E8%B7%AF%E5%BE%84.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名黄腾霄(包含链接: https://xinyuehtx.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-08-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 那么如果添加RunAs
  • 其他的坑
  • 结论
    • 解决方式
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档