首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以系统形式运行应用程序(没有PSTools)

以系统形式运行应用程序(没有PSTools)
EN

Stack Overflow用户
提问于 2015-12-31 19:09:17
回答 1查看 2K关注 0票数 0

有些注册表项是由系统拥有的,除非我作为系统运行,否则我无法编辑它们。我希望能够从我的VB应用程序中编辑这些键。我发现的任何教程都建议使用PSTools (现在不再推荐的At命令)或schtasks。PSTools看起来很棒,但它的许可似乎限制了(关于重新分发)。At和messy任务太混乱,需要调度延迟。

这与我先前的问题有关。我想得到我发现的,并通过VB实现它。

Modify audit policy (group policy)

我也发现了这个,但是我发现了一个错误1314。我意识到,尽管运行VS2010 "requireAdministrator",甚至以管理员身份运行EXE,它仍然在任务管理器中显示我的用户名(以我的身份运行,而不是以管理员的身份运行)。我以管理员身份登录,却得到了错误5。即使按照这篇文章(CreateProcessAsUser error 1314)的建议,在确保我有权限设置之后,它仍然给了我错误5。

Using a vb.net application running as SYSTEM, how do I start a detached process for each logged on user?

我将示例更改为"TokenAccessLevels.Read和复制“,而不是MaximumAllowed。

代码语言:javascript
复制
 If Not DuplicateTokenEx(hToken.DangerousGetHandle,
            TokenAccessLevels.Read & TokenAccessLevels.Duplicate,
            Nothing,
            SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation,
            TOKEN_TYPE.TokenPrimary,
            phNewToken) Then

我从CreateProcessAsUser得到了错误5。这是在以管理员身份运行VS2010时发生的。

EN

回答 1

Stack Overflow用户

发布于 2015-12-31 22:43:02

topic16714.html

这篇文章是我能做的最好的了。基本上,安装一个服务,运行它,然后删除它。根据行动纲领,这是他的解释。

那么它是如何工作的呢?

  1. &符号告诉cmd.exe解析下面的文本,就像它是批处理文件中的新行一样(它基本上是一个新的行分隔符,它允许将多个命令组合成一行)。

要细分它:创建服务- sc创建-- binPath= "cmd /c start calc“type=自有的type=交互启动服务网络启动-(这也可以通过: sc启动-)删除服务sc删除--

  1. 变量
    • 服务名称:--
    • 运行应用程序: calc

变量:

  1. 它的工作原理:

cmd /c -允许我们将参数传递给cmd (如果没有这个初始部分,如果您在cmd.exe中复制和粘贴,而不是在运行对话框中,它将工作。因此修正了它) sc创建binPath= --因为cmd.exe不响应服务命令,所以当SCM在binPath (Reg = ImagePath)中运行应用程序时,它将终止它,当没有及时响应时,因此不能使用cmd.exe。它必须调用其他的东西--在本例中是calc.exe、sc、create、type= --这个花了一段时间才弄清楚。初始问题是启动cmd.exe的窗口站(它的子进程被calc.exe继承)。幸运的是,在阅读了Mark的Windows e4之后,我能够通过将服务指定为交互式来解决这个问题。(实验中,它实际上必须是交互的(256)和自己的(16)(256\16= 272)。基本上,这允许窗口在\WinSta0 0\Default(当前用户的桌面,允许窗口显示)中运行。在对sc不接受type =进行了一些研究之后,我发现它允许我们再次指定它,而不是按位覆盖Type (dword) -OR(添加它)。问题解决了!net启动服务(可能调用StartService) cmd.exe运行在start File的命令行(CL)中,其中start可能调用ShellExecute ( MS不允许start指定SW_*命令(如hide)。虽然它确实允许我们最小化/最大限度的窗口。cmd.exe打开应用程序/文件,SCM由于没有及时响应其命令而终止cmd.exe,该窗口现在显示给用户。sc删除-最后,我们通过删除服务来清理路径。

对我来说这起作用了。

代码语言:javascript
复制
cmd /c sc create -- binPath= "cmd /c start app.exe" type= own type= interact & net start -- & sc delete --

现在,我很难找到绝对的工作途径。我必须将我的.EXE放在System32和SysWOW64中,所以我不必使用绝对路径。根据该网站,这应该是允许绝对路径工作。

代码语言:javascript
复制
cmd /c sc create -- binPath= "cmd /c start  \"\"  \"C:\windows\regedit.exe\" " type= own type= interact & net start -- & sc delete --

它从来没有对我起作用,因为它会挂一段时间,也不会启动这个应用程序。它应该马上就能完成。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34550685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档