debugging 如何在Visual Studio中将应用程序作为服务帐户(例如网络服务)进行调试?

t40tm48m  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(158)

Windows有不同的built-in standard service accounts,例如NetworkService帐户。在Visual Studio中调试时,此SO post提供了关于如何以不同于当前用户的用户身份调试代码的不同答案,但这些答案显示了不同本地用户帐户/管理员帐户的解决方案,这些帐户需要密码才能运行代码(这些内置帐户没有密码)。是否有一种方法可以作为这些内置服务帐户之一运行和调试Visual Studio中的代码?
我的用例:我想调试在生产环境中以NetworkService帐户运行的服务(和测试)。此answer说明如何使用PsExecNetworkService帐户运行应用程序。我是否可以通过某种方式使用PsExec启动服务或测试,然后将Visual Studio附加到进程并对其进行调试?

xzv2uavs

xzv2uavs1#

事实证明,这实际上是非常简单和直接的:

1.使用所需的服务帐户执行应用程序,以获得Visual Studio调试器可以将其自身附加到的运行进程

这可以通过注册为服务来完成,或者在Service应用程序中输入服务帐户凭据,右键单击服务名称->属性并在登录选项卡中设置帐户,或者通过PowerShell,就像它是described in this SO answer一样。
另一种方法是将PsExec作为described in this answer使用。下载PsExec后,在shell中运行以下命令,将cmd作为服务帐户打开,例如网络服务帐户:

psexec -i -u "nt authority\network service" cmd.exe

在cmd中运行whoami以确保它以所需的帐户执行。现在导航到应该调试的可执行文件,并从此cmd启动它。
注意:我在应用程序的开头添加了一个sleep,以确保在我连接调试器之前它不会执行任何代码(C++示例):

while (!IsDebuggerPresent())
{
  std::this_thread::sleep_for(std::chrono::seconds(5));
}

2.将Visual Studio调试器附加到正在运行的进程

以管理员身份打开Visual Studio,单击“添加”->“附加到进程”以打开Attach to Process窗口。打开窗口后,确保在搜索进程时单击Show processes for all users复选框,因为它是在不同的用户帐户下执行的。然后搜索在上一步中启动的进程,并单击Attach。现在应该可以调试app

相关问题