首先,我不想与任何types的桌面进行交互。
我试图做的是分开关注。 我有一个在本地系统帐户(LSA)下运行的服务。 有时候,我需要在不同的帐户下执行进程。
我正在使用System.Diagnostics.Process 。 这是我迄今为止所尝试的:
将服务应用程序作为普通桌面应用程序运行,在同一个帐户下启动subprocess: works
将服务应用程序作为普通桌面应用程序运行,在另一个帐户下启动subprocess: 工作
将服务作为服务应用程序(如LSA)运行,启动同一帐户(LSA)下的subprocess: 工作
将服务作为服务应用程序(如LSA)运行,在其他帐户下启动subprocess: 不起作用
不适用于我的情况抛出一个Win32Exception与“拒绝访问”。 我已经授予相关用户帐户作为服务login的权利,但是没有任何区别。
C#Windows CE .net 3.5来检查内存使用情况
RegOpenKeyEx返回错误的path名称错误(代码161)
C#comboBox与计时器的时间过去了
.NET Framework 3.5 SP1是否适用于Windows 7 x64?
如何在Windows 8和Windows Server 2012上使用WiX刻录安装.NET Framework 3.5?
为了好玩,我也尝试了这些场景:
如果我在我自己的开发者帐户下运行服务(我们称之为Developer),并尝试在低权限的帐户(我们称之为ServiceAccount)下启动subprocess,则process.Start()不会抛出并返回true,但我从来没有看到在Sys内部的Process Explorer中启动任何进程,并立即触发Process.Exited 。
如果我在ServiceAccount下运行该服务,并在同一帐户(ServiceAccount)下启动subprocess,则按预期工作。
这是我正在使用的代码:
var pi = new processstartinfo { CreateNowindow = true,WindowStyle = ProcessWindowStyle.Hidden,UseShellExecute = false,ErrorDialog = false,RedirectStandardError = false,RedirectStandardInput = false,RedirectStandardOutput = false,FileName = @"C:PathToSomeApplication.exe",Arguments = @"Some arguments",UserName = "SomeUserName",Domain = "SomeDomain",Password = securestringUtils.Convert("SomePassword") }; var process = new Process(); process.StartInfo = pi; process.Start(); // Throws when run as a service
有任何想法吗?
如何在C#系统中设置HotKey
C ++ / CLI(以前称为“Managed C ++”)比标准C ++有什么优势?
ConsoleApplication / Service需要40秒才能启动
如何在C#中创build一个COM(和其他设备)模拟器?
与命令行应用程序进行交互的最佳方式
我终于找到了这个: 使用Process.Start()从Windows服务中以不同的用户身份启动进程 ,并解决了我的问题。 诚然,答案中提供的代码需要大量的抛光,但似乎解决了我的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。