我有一个 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/