这个怎么解决
通过process来运行的代码:
if (!string.IsNullOrEmpty(path))
{
using (Process process = new Process())
{
try
{
process.StartInfo.FileName = path;
process.Start();
}
catch (Exception)
{
throw;
}
}
}
通过CMD来运行的代码:
using (Process cmd = new Process())
{
if (!string.IsNullOrEmpty(path))
{
try
{
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.CreateNoWindow = true;
cmd.Start();
path = "\"" + path + "\"";
cmd.StandardInput.WriteLine(path);
}
catch (Exception)
{
throw;
}
}
}
有人说是因为XP以上的系统有UAC 所以被限制了 但是服务是以管理员身份运行的 后来我尝试用第三方dll 好像也是不行
第三方DLL写的:
try
{
if (!string.IsNullOrEmpty(path))
{
IntPtr usertoken = IntPtr.Zero;
ApiDefinitions.WTSQueryUserToken(ApiDefinitions.WTSGetActiveConsoleSessionId(), ref usertoken);
ApiDefinitions.PROCESS_INFORMATION procInfo = new ApiDefinitions.PROCESS_INFORMATION();
ApiDefinitions.STARTUPINFO startinfo = new ApiDefinitions.STARTUPINFO();
startinfo.cb= (uint)Marshal.SizeOf(startinfo);
ApiDefinitions.CreateProcessAsUser(
usertoken,
path,
"",
IntPtr.Zero,
IntPtr.Zero,
false,
0,
IntPtr.Zero,
null,
ref startinfo,
out procInfo
);
if (usertoken!=IntPtr.Zero)
{
ApiDefinitions.CloseHandle(usertoken);
int _currentAquariusProcessId = (int)procInfo.dwProcessId;
}
}
}
catch (Exception)
{
throw;
}
15 个解决方案
#1
有人说是因为XP以上的系统有UAC 所以被限制了 但是服务是以管理员身份运行的
是这样滴,在xp及之前的os版本,是可以写程序(比如win服务、控制台程序、exe等)启动新的exe的
win7版本,也能够启动第三方exe,只是新的exe是以管理员帐户运行的,你登录的用户,看不到界面,但是进程里面是有的。
是这样滴,在xp及之前的os版本,是可以写程序(比如win服务、控制台程序、exe等)启动新的exe的
win7版本,也能够启动第三方exe,只是新的exe是以管理员帐户运行的,你登录的用户,看不到界面,但是进程里面是有的。
#2
但是有一个问题 比如 我通过服务来启动QQ 的确是启动成功了 但是却无法显示界面 有没有办法看到界面呢
#3
只能切换到系统管理员帐户,才可以看到界面。
#4
我们手工打开一个程序A,操作者是当前登录你的window的用户,可能是adminstrator,可能是管理员
而用服务启动另一个程序A,相当于“服务”打开“程序A“,服务 我记得是window的Users用户,不是管理员
想法子让你的服务先拿到管理员权限,然后启动第三方软件
而用服务启动另一个程序A,相当于“服务”打开“程序A“,服务 我记得是window的Users用户,不是管理员
想法子让你的服务先拿到管理员权限,然后启动第三方软件
#5
win以来,很多软件都需要管理员权限,安装一个软件,或者更新系统时,弹出的那个对话框
#6
我的服务是用local system来运行的 被打开的第三方软件(EXE) 是以当前用户的身份运行(管理员) 后来我通过 CreateProcessAsUser 函数来提升权限(服务以system来运行) 这个时候 被打开的第三方软件 有界面了 但是被打开的第三方软件 是用system来运行 所以读取不到它自己的配置文件(第三方程序的配置文件在admin里面).......我都弄晕了....
#7
只好让第三方在administrator下运行,你可以找第三方运行后的令牌token,然后用此token调用CreateProcessAsUser启动第三方,具体你自己研究吧,记不太清了
#8
MSDN 上有篇文章,好像是获取explorer进程的用户,然后再启动用户进程
https://social.msdn.microsoft.com/Forums/vstudio/en-US/0c0ca087-5e7b-4046-93cb-c7b3e48d0dfb/how-run-client-application-as-a-windows-service-in-c?forum=csharpgeneral
https://social.msdn.microsoft.com/Forums/vstudio/en-US/0c0ca087-5e7b-4046-93cb-c7b3e48d0dfb/how-run-client-application-as-a-windows-service-in-c?forum=csharpgeneral
#9
这个好像是把服务提升为system来运行 然后通过system来打开exe 这样会出现一个问题 被打开的exe 不能读取它自身的配置文件.....
#10
windows7以后,服务器系统启动的exe在session 0,而不是用户session。此会话不能显示图形界面。
#11
不显示图形界面,不仅仅安全,而且也可以彻底抛掉windows系统多年以前的那个被人诟病的毛病——图形界面的软件大量占用和消耗了服务器资源、严重影响运行效率。
你设计软件时,就应该真正先高清楚到底是给图形界面客户端编写的,还是给服务器编写的。一个winform、wpf程序员思维,不能编写那些只在windows servive启动的exe。
你设计软件时,就应该真正先高清楚到底是给图形界面客户端编写的,还是给服务器编写的。一个winform、wpf程序员思维,不能编写那些只在windows servive启动的exe。
#12
感谢回答 XP以上的系统的确有session 0隔离 服务和程序不能通信 我现在已经穿透了session隔离 把服务提升到system的权限了 也就是说 现在我的服务是在session 1上运行 会出现一个问题 第三方程序启动 不能读取配置文件(第三方程序的配置文件在admin文件夹下面) 当然 你说的不显示图形界面 的确是安全 但是假如说 我通过服务来启动QQ 的确是启动了 但因为没有界面 所以我无法登陆QQ
#13
https://social.msdn.microsoft.com/Forums/vstudio/en-US/0c0ca087-5e7b-4046-93cb-c7b3e48d0dfb/how-run-client-application-as-a-windows-service-in-c?forum=csharpgeneral
你确定试过?
这个是用你登录用户启动的,界面也显示在你的桌面中,当然前提是登录过了
你确定试过?
这个是用你登录用户启动的,界面也显示在你的桌面中,当然前提是登录过了
#14
https://code.msdn.microsoft.com/CSCreateProcessAsUserFromSe-b682134e/view/Discussions#content
这个demo可以解决,本地win7+vs2010 通过window服务打开了外部的一个winform程序
这个demo可以解决,本地win7+vs2010 通过window服务打开了外部的一个winform程序
#15
尝试一下 :http://download.csdn.net/detail/tanggaohui0322/7789937
#1
有人说是因为XP以上的系统有UAC 所以被限制了 但是服务是以管理员身份运行的
是这样滴,在xp及之前的os版本,是可以写程序(比如win服务、控制台程序、exe等)启动新的exe的
win7版本,也能够启动第三方exe,只是新的exe是以管理员帐户运行的,你登录的用户,看不到界面,但是进程里面是有的。
是这样滴,在xp及之前的os版本,是可以写程序(比如win服务、控制台程序、exe等)启动新的exe的
win7版本,也能够启动第三方exe,只是新的exe是以管理员帐户运行的,你登录的用户,看不到界面,但是进程里面是有的。
#2
但是有一个问题 比如 我通过服务来启动QQ 的确是启动成功了 但是却无法显示界面 有没有办法看到界面呢
#3
只能切换到系统管理员帐户,才可以看到界面。
#4
我们手工打开一个程序A,操作者是当前登录你的window的用户,可能是adminstrator,可能是管理员
而用服务启动另一个程序A,相当于“服务”打开“程序A“,服务 我记得是window的Users用户,不是管理员
想法子让你的服务先拿到管理员权限,然后启动第三方软件
而用服务启动另一个程序A,相当于“服务”打开“程序A“,服务 我记得是window的Users用户,不是管理员
想法子让你的服务先拿到管理员权限,然后启动第三方软件
#5
win以来,很多软件都需要管理员权限,安装一个软件,或者更新系统时,弹出的那个对话框
#6
我的服务是用local system来运行的 被打开的第三方软件(EXE) 是以当前用户的身份运行(管理员) 后来我通过 CreateProcessAsUser 函数来提升权限(服务以system来运行) 这个时候 被打开的第三方软件 有界面了 但是被打开的第三方软件 是用system来运行 所以读取不到它自己的配置文件(第三方程序的配置文件在admin里面).......我都弄晕了....
#7
只好让第三方在administrator下运行,你可以找第三方运行后的令牌token,然后用此token调用CreateProcessAsUser启动第三方,具体你自己研究吧,记不太清了
#8
MSDN 上有篇文章,好像是获取explorer进程的用户,然后再启动用户进程
https://social.msdn.microsoft.com/Forums/vstudio/en-US/0c0ca087-5e7b-4046-93cb-c7b3e48d0dfb/how-run-client-application-as-a-windows-service-in-c?forum=csharpgeneral
https://social.msdn.microsoft.com/Forums/vstudio/en-US/0c0ca087-5e7b-4046-93cb-c7b3e48d0dfb/how-run-client-application-as-a-windows-service-in-c?forum=csharpgeneral
#9
这个好像是把服务提升为system来运行 然后通过system来打开exe 这样会出现一个问题 被打开的exe 不能读取它自身的配置文件.....
#10
windows7以后,服务器系统启动的exe在session 0,而不是用户session。此会话不能显示图形界面。
#11
不显示图形界面,不仅仅安全,而且也可以彻底抛掉windows系统多年以前的那个被人诟病的毛病——图形界面的软件大量占用和消耗了服务器资源、严重影响运行效率。
你设计软件时,就应该真正先高清楚到底是给图形界面客户端编写的,还是给服务器编写的。一个winform、wpf程序员思维,不能编写那些只在windows servive启动的exe。
你设计软件时,就应该真正先高清楚到底是给图形界面客户端编写的,还是给服务器编写的。一个winform、wpf程序员思维,不能编写那些只在windows servive启动的exe。
#12
感谢回答 XP以上的系统的确有session 0隔离 服务和程序不能通信 我现在已经穿透了session隔离 把服务提升到system的权限了 也就是说 现在我的服务是在session 1上运行 会出现一个问题 第三方程序启动 不能读取配置文件(第三方程序的配置文件在admin文件夹下面) 当然 你说的不显示图形界面 的确是安全 但是假如说 我通过服务来启动QQ 的确是启动了 但因为没有界面 所以我无法登陆QQ
#13
https://social.msdn.microsoft.com/Forums/vstudio/en-US/0c0ca087-5e7b-4046-93cb-c7b3e48d0dfb/how-run-client-application-as-a-windows-service-in-c?forum=csharpgeneral
你确定试过?
这个是用你登录用户启动的,界面也显示在你的桌面中,当然前提是登录过了
你确定试过?
这个是用你登录用户启动的,界面也显示在你的桌面中,当然前提是登录过了
#14
https://code.msdn.microsoft.com/CSCreateProcessAsUserFromSe-b682134e/view/Discussions#content
这个demo可以解决,本地win7+vs2010 通过window服务打开了外部的一个winform程序
这个demo可以解决,本地win7+vs2010 通过window服务打开了外部的一个winform程序
#15
尝试一下 :http://download.csdn.net/detail/tanggaohui0322/7789937