Windows有不同的built-in standard service accounts,f.e. NetworkService
帐户。这个SO post提供了在Visual Studio中调试时如何以不同于当前用户的用户身份调试代码的不同答案,但这些答案显示了不同本地用户帐户/管理员帐户的解决方案,这些帐户要求密码来运行代码(这些内置帐户没有密码)。有没有一种方法可以作为这些内置服务帐户之一从Visual Studio运行和调试代码?
我的用例:我想调试在生产环境中以NetworkService
帐户运行的服务(和测试)。这个answer解释了如何使用PsExec作为NetworkService
运行应用程序。我是否可以用PsExec启动服务或测试,然后将Visual Studio附加到进程并对其进行调试?
1条答案
按热度按时间9wbgstp71#
事实证明,这实际上是非常简单和直接的:
1.使用所需的服务帐户执行应用程序,以获得Visual Studio调试器可以将自身附加到其上的正在运行的进程
这可以通过注册为服务来完成,然后在
Service
应用中输入服务帐户凭据,右键单击服务名称->属性并在登录选项卡中设置帐户,或者通过PowerShell,就像described in this SO answer一样。另一种方法是使用PsExec作为described in this answer。下载PsExec后,在shell中运行以下命令以打开cmd作为服务帐户,例如:对于网络服务帐户:
字符串
在cmd中运行
whoami
以确保它作为所需的帐户执行。现在导航到应该调试的可执行文件,并从此cmd启动它。注意:我在应用程序的开头添加了一个sleep,以确保在我连接调试器之前它不会执行任何代码(C++示例):
型
2.将Visual Studio调试器附加到正在运行的进程
以管理员身份打开Visual Studio,单击Debug -> Attach to Process以打开
Attach to Process
窗口。窗口打开后,在搜索进程时确保单击Show processes for all users
复选框,因为它是在不同的用户帐户下执行的。然后搜索在上一步中启动的进程,并单击Attach
。现在应该可以调试应用程序了。x1c 0d1x的数据