.net - 如何为windows服务添加命令行界面

标签 .net powershell windows-services

我有一个 Windows 服务应用程序。
目前所有的管理任务都是通过配置编辑完成的。

我想添加某种命令行界面 - 我希望它通过 powershell 来完成。

而且我不知道我应该从哪里开始 - 在这种情况下我该如何创建应用程序界面。 powershell 应该如何与服务通信?在这种情况下还需要远程功能。

(在该功能中可能还有其他管理工具 - 使用 GUI 或通过浏览器。)

最佳答案

稍微扩展一下 L.B 的简短评论:让特权服务与用户桌面交互并不是最好的主意,因为这样做可能会打开特权提升的途径。 Shatter attacks例如以这种方式工作。

处理与用户交互的更好方法是在 localhost 上有一个非特权监听器(例如 127.0.0.1:5555 ),它将显示通过该端口提交的消息,并让特权服务连接到监听器以向用户发送消息。

下面的代码片段 - 虽然留有很大的改进空间 - 应该让您大致了解这样的监听器的外观:

$addr = "127.0.0.1"
$port = 5555

[byte[]]$byte = @(0)
$enc = [System.Text.Encoding]::ASCII
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

$socket = New-Object System.Net.Sockets.TcpListener([System.Net.IPAddress]::Parse($addr), $port)
$socket.Start()
while ( $true ) {
  $client = $socket.AcceptTcpClient()
  $stream = $client.GetStream()
  [byte[]]$input = @()
  while ( ($i = $stream.Read($byte, 0, 1)) -ne 0 ) { $input += $byte }
  $client.Close()
  [System.Windows.Forms.MessageBox]::Show($enc.GetString($input), "Title")
}

关于.net - 如何为windows服务添加命令行界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12582524/

相关文章:

c# - 在 C# 中导入 DLL

c# - Entity Framework 不支持 x.ToString()!

.net - 如何在Powershell中将流保存到磁盘?

powershell - 在 Vista 中自动设置双显示器

powershell - 如何在Powershell block /闭包参数中使用变量

java - 当我们手动将它作为 Windows 服务运行时,如何更改 tomcat 的 java_opts?

c# - 向菜单条添加标签

.net - 在 .NET 中查找 Windows 窗体控件的所有事件处理程序

windows - 使用 sc.exe 使用当前用户帐户创建 Windows 服务

带 GUI 的 C# Windows 服务