- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要从用 VB.Net 编写的 Windows 服务中锁定工作站。我正在 Windows 7 上编写应用程序,但它也需要在 Vista 和 XP 下工作。
User32 API LockWorkStation 不起作用,因为它需要交互式桌面,我得到的返回值为 0。
我尝试从 Process 和 Shell 调用 %windir%\System32\rundll32.exe user32.dll,LockWorkStation,但仍然没有任何 react 。
将服务设置为与桌面交互是行不通的,因为我在管理员帐户下运行该服务,因此它可以执行一些需要管理员权限的其他操作 - 例如禁用网络,并且您只能选择与桌面交互选项如果在本地系统帐户下运行。
那将是次要问题-如何从在本地系统帐户下运行的服务运行具有管理员权限的另一个应用程序,而不会打扰用户。
我正在编写一个应用程序来控制我的 child 的计算机/互联网访问(我计划在完成后开源),所以我需要一切都尽可能悄悄地发生。
我有一个 UI 可以处理任务栏中的设置和状态通知,但这很容易杀死并因此破坏锁定。我可以制作另一个隐藏的 Windows 窗体应用程序来处理锁定,但这似乎是一个相当不雅的解决方案。
有更好的想法吗?
最佳答案
我一直在与这个问题作斗争一个多星期,在阅读了很多关于这个问题的信息之后,终于找到了解决方案......
您必须像这样使用 CreateProcessAsUser 函数:
Private Shared Sub Executer(ByVal content As String)
Dim objProcess As System.Diagnostics.Process
Dim filename As String
filename = "e:\lock.bat"
'create a bat file with ''rundll32.exe user32.dll,LockWorkStation'' inside
Dim UserTokenHandle As IntPtr = IntPtr.Zero
WindowsApi.WTSQueryUserToken(WindowsApi.WTSGetActiveConsoleSessionId, UserTokenHandle)
Dim ProcInfo As New WindowsApi.PROCESS_INFORMATION
Dim StartInfo As New WindowsApi.STARTUPINFOW
StartInfo.cb = CUInt(Marshal.SizeOf(StartInfo))
WindowsApi.CreateProcessAsUser(UserTokenHandle, filename, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, False, 0, IntPtr.Zero, Nothing, StartInfo, ProcInfo)
If Not UserTokenHandle = IntPtr.Zero Then
WindowsApi.CloseHandle(UserTokenHandle)
End If
End Sub
<DllImport("Advapi32.dll", EntryPoint:="CreateProcessAsUser", ExactSpelling:=False, SetLastError:=True, CharSet:=CharSet.Unicode)> _
Public Shared Function CreateProcessAsUser( _
ByVal hToken As IntPtr, _
ByVal lpApplicationName As String, _
<[In](), Out(), [Optional]()> ByVal lpCommandLine As StringBuilder, _
ByVal lpProcessAttributes As IntPtr, _
ByVal lpThreadAttributes As IntPtr, _
<MarshalAs(UnmanagedType.Bool)> ByVal bInheritHandles As Boolean, _
ByVal dwCreationFlags As Integer, _
ByVal lpEnvironment As IntPtr, _
ByVal lpCurrentDirectory As String, _
<[In]()> ByRef lpStartupInfo As STARTUPINFOW, _
<Out()> ByRef lpProcessInformation As PROCESS_INFORMATION) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
Dim cmdline As New StringBuilder
cmdline.Append("rundll32.exe user32.dll,LockWorkStation")
WindowsApi.CreateProcessAsUser(UserTokenHandle, Nothing, cmdline, IntPtr.Zero, IntPtr.Zero, False, 0, IntPtr.Zero, Nothing, StartInfo, ProcInfo)
关于.net - 如何从 Windows 服务锁定工作站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2466606/
有没有办法将同一进程的不同实例分配给不同的camunda实例(工作站)? 由于我的camunda进程会有更多的请求,而不是我的电脑可以处理的,我正在寻找一种方法,将其中一些请求分配给另一个camund
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
我想写一个解锁工作站的小应用程序。把我需要的规范说得很简单:有一个运行的 exe,并在定义的时间(比如午夜)解锁工作站。当然,应用程序知道登录帐户的用户名和密码。 我知道 LogonUser API
这个问题在这里已经有了答案: 关闭10 年前。 Possible Duplicate: Lock Windows workstation programmatically in C# 我目前正在开发
所以我在 VMware 工作站中设置了一个 centOS 虚拟机,安装了 qradar ..一切运行良好。我将此虚拟机称为 QR1。 我能够在我的主机上使用 QR1 上的 qradar 控制台,互联网
我正在使用 VMware Workstation 6.0 模拟“机箱”中密集的“ Blade ”集群。主机和目标操作系统都是 Linux。每个“机箱”都使用 vmnet 交换机作为虚拟背板,虚拟 Bl
我很难区分厨师 server , workstation , client , 和 node .更重要的是,他们在设置初始环境时的立场是什么?我已经阅读了无数文章和文档,但我似乎无法理解不同的角色以及
我遇到了这个用于锁定 Windows 工作站的示例: using System.Runtime.InteropServices; ... [DllImport("user32.dll", SetLas
有没有办法通过 Windows 上的 Python 脚本锁定 PC? 我不想自己实现某种锁定 - 我想使用与用户按下 WIN+L 或通过开始菜单锁定机器。 最佳答案 这可以通过 LockWorkSta
我已经在 Windows 8.1 上安装了 VMware-workstation-full-10.0.3-1895310。尽管在我的 LAN 适配器中启用了 VMware 桥接协议(protocol)
我能够将 SharePoint 2010 VHD 与 vmware Hook 。中央管理员出现了,但 80 端口甚至没有出现。我遇到了这个http://blogs.msdn.com/b/steve_f
我有 2 个不同的 ubuntu VPS 实例,每个实例都有不同的 IP 地址。一个被指定为 Chef 服务器,另一个充当工作站。 当我使用命令时 Knife 配置-i 我确实获得了在本地定位 adm
问题: 我有一个 WPF fullscreen应用程序,充当仪表板。计算机在域中,域策略强制计算机在最后一次用户事件后 10 分钟内锁定。我想防止工作站(或桌面)自动锁定。 这种行为的一个例子:Win
关闭。这个问题是not about programming or software development .它目前不接受答案。 这个问题似乎不是关于 a specific programming
我已经在 Windows 10 工作站的 WSL(Linux 的 Windows 子系统)中安装了 Ansible。 我的目标是同时配置 WSL 和 Windows 10 本身。 我能够针对本地主机运
我使用 Netbeans 在 Windows 7 工作站上进行 PHP 开发。 Netbeans 将文件与执行代码的远程 Linux 服务器同步。如果我更改分支,并且有一个新的符号链接(symboli
我正在尝试在运行 Ubuntu 18.04 的 VMWare Workstation guest 中运行 Minikube。 kubectl version结果是: Client Version: v
我们团队中有 5 人从事一些 ASP 项目。局域网中有一台运行Windows Server的本地服务器,我们不怎么用它只是把它作为备份的存储。我们还有一台运行 Windows Server 的远程服务
我是一名优秀的程序员,十分优秀!