能否通过Visual Studio 2017启动远程服务并调试启动中的远程进程?
VS2017远程服务启动与进程启动调试全攻略
一、能不能用VS2017直接启动远程机器的服务?
VS2017本身没自带一键启动远程服务的功能,但有两个实用的解决办法:
- 配置VS外部工具调用PowerShell:在VS顶部菜单找「工具」->「外部工具」,点击添加。标题填“启动远程服务”,命令选
powershell.exe,参数填Invoke-Command -ComputerName "远程机器名" -ScriptBlock {Start-Service -Name "你的服务名称"},记得替换成实际的机器名和服务名。配置好后,你就能在VS的「工具」菜单里直接点这个选项启动远程服务了。前提是你已经开启了远程机器的PowerShell远程功能,且有足够的权限。 - 用生成事件执行sc命令:如果你的服务项目需要部署后启动,在项目属性的「生成事件」->「生成后事件命令行」里加一句
sc \\远程机器名 start 你的服务名称。这个命令需要你有远程机器的管理员权限,而且防火墙要允许文件共享和服务控制的端口。
二、调试远程application.exe的启动过程(解决你填路径后启动失败的问题)
远程调试启动阶段确实容易踩坑,你填了路径但失败,大概率是远程调试器的配置没到位,按下面的步骤一步步来:
1. 先搞定远程机器的调试器部署
- 从你本地VS2017的安装目录里找到远程调试工具,路径大概是
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Remote Debugger(根据你的VS版本和版本类型调整,比如Professional就把Community换成Professional)。把整个Remote Debugger文件夹复制到远程机器,或者直接在远程机器上安装对应的远程调试器安装包。 - 一定要以管理员身份启动远程机器上的
msvsmon.exe,然后在调试器的「工具」->「选项」里设置身份验证:如果是测试环境,先选「无身份验证」(更易连接),正式环境再换回Windows身份验证。记住调试器显示的地址,比如远程机器名:4022(VS2017默认远程调试端口是4022)。
2. 配置VS项目的调试属性
- 右键你的项目 -> 属性 -> 调试:
- 「启动操作」选「启动外部程序」,然后填远程机器上
application.exe的完整路径,比如\\远程机器名\C$\你的应用目录\application.exe(用UNC路径),或者直接填远程机器的本地路径C:\你的应用目录\application.exe(前提是VS能访问到远程机器的磁盘)。 - 勾选「使用远程计算机」,然后输入刚才记下的远程调试器地址,比如
远程机器名:4022。 - 「工作目录」填远程程序的工作目录,和上面的路径对应就行,比如
\\远程机器名\C$\你的应用目录\。
- 「启动操作」选「启动外部程序」,然后填远程机器上
- 重要提醒:VS不会自动把你的编译产物传到远程机器,你得手动把
application.exe和所有依赖文件复制到远程机器的对应路径,或者用VS的发布功能部署过去。
3. 调试启动阶段的关键技巧
- 如果你要调试
main函数或者启动时的第一行代码,一定要在启动代码里加个5秒左右的延迟,比如C++里写Sleep(5000),C#里写System.Threading.Thread.Sleep(5000)。因为远程调试器连接需要一点时间,不加延迟的话,程序可能已经跑过启动代码了,你就抓不到断点了。 - 确保远程机器的防火墙允许4022端口(或者你设置的其他调试端口)通过,本地机器也要能 ping 通远程机器,网络没问题。
- 如果用Windows身份验证,要保证你本地的用户账号在远程机器上有调试权限,或者直接用远程机器的管理员账号登录VS。
常见问题排查
- 启动调试提示无法连接:检查远程调试器是不是在运行,端口填错了没,防火墙有没有放行,网络是不是通的。
- 提示找不到远程程序:确认远程路径写对了,VS能访问到那个共享文件夹(如果用UNC路径),或者远程机器上确实有这个程序在指定路径。
内容的提问来源于stack exchange,提问作者Meraj Hussain
相关产品推荐
相关产品推荐

