System有一些注册表项,除非我以System身份运行,否则我无法编辑它们。我希望能够从我的VB应用程序编辑这些键。我发现的任何教程都建议使用PSTools,现在已弃用的At
命令或schtasks。 PSTools似乎很棒,但它的许可似乎是限制性的(关于重新分发)。 at和schtasks太乱了,需要调度延迟。
这与我之前的问题有关。我想采取我发现的,并通过VB实现它。
Modify audit policy (group policy)
我也发现了这一点,但是收到错误1314.我意识到尽管运行VS2010" requireAdministrator",甚至以管理员身份运行我的EXE,它仍然在任务管理器中显示我的用户名(以我身份运行,而不是管理员)。我以管理员身份登录,并获得了错误5。即使确保我已经按照这篇文章(CreateProcessAsUser error 1314)的建议设置了权限,它仍然给了我错误5。
我将示例更改为" TokenAccessLevels.Read和Duplicate"而不是MaximumAllowed。
If Not DuplicateTokenEx(hToken.DangerousGetHandle,
TokenAccessLevels.Read & TokenAccessLevels.Duplicate,
Nothing,
SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation,
TOKEN_TYPE.TokenPrimary,
phNewToken) Then
我从CreateProcessAsUser获得错误5。这是以管理员身份运行VS2010。
答案 0 :(得分:0)
http://forum.sysinternals.com/tip-run-process-in-system-account-scexe_topic16714.html
这篇文章是我能做的最好的。基本上,安装服务,运行它,然后删除它。根据OP,这是他的解释。
那它是如何运作的?
- &符号告诉cmd.exe解析后面的文本,好像它是批处理文件中的新行(它基本上是一个新行 分隔符,允许多个命令组合成1行)
醇>要将其分解:创建服务 - sc create - binPath =" cmd / c start 计算值" type = own type = interact Start Service net start - (这可以 也可以用:sc start - )删除服务sc删除 -
- 变量
醇>
- 服务名称: -
- 运行的应用程序:calc
变量:
- 工作原理:
醇>cmd / c - 允许我们将参数传递给cmd(没有这个初始值 部分,如果你复制&粘贴在cmd.exe中,但不在“运行”中 对话。所以这个修复了它)sc create binPath = - 因为cmd.exe没有 当SCM在binPath中运行应用程序时,响应服务命令(Reg = ImagePath)然后它会终止它,当没有及时响应时,因此无法使用cmd.exe。它必须打电话 在这种情况下是calc.exe sc create type =这一个的其他东西 花了一段时间才弄明白。最初的问题是Window Station 其中启动了cmd.exe(其中继承了 calc.exe(其子进程))。幸运的是,在阅读了Mark的Windows之后 内部e4,我能够通过将服务指定为来解决它 互动。 (试验,它实际上必须是两个 交互式(256)和拥有(16)(256 | 16 = 272)。基本上这是什么 允许窗口在\ WinSta0 \ Default(当前 用户的桌面,允许显示窗口。)一些之后 沮丧的研究表明sc不会接受类型 = own | interact,我发现它允许我们再次指定它,而不是覆盖Type(dword)它按位OR运算(添加它)。 问题解决了! net start - 启动服务(可能是调用 StartService)cmd.exe使用start [File]的命令行(CL)运行 其中的开始可能会调用ShellExecute(很不如MS没有。) 允许开始指定SW_ *命令(如hide)。虽然确实如此 允许我们最小/最大窗口。 cmd.exe打开应用程序/文件,即SCM 终止cmd.exe没有及时响应它 命令,现在向用户显示窗口。 sc delete - 最后 我们通过删除服务来清理我们的路径
对我来说,这很有效。
cmd /c sc create -- binPath= "cmd /c start app.exe" type= own type= interact & net start -- & sc delete --
现在,我无法获得绝对的工作路径。我不得不把我的.EXE放在System32和SysWOW64中,所以我没有必要使用绝对路径。根据该网站,这应该允许绝对路径工作。
cmd /c sc create -- binPath= "cmd /c start \"\" \"C:\windows\regedit.exe\" " type= own type= interact & net start -- & sc delete --
它从来没有对我有用,因为它会挂起一段时间而且永远不会启动应用程序。它应该几乎立即完成。