我正在更新一个应用程序。旧代码有一个主要方法,该方法会检查Windows上正在运行的进程,并检查是否正在运行作为应用程序一部分的某个必需进程,如果没有,则启动它。它是这样的:
Process[] localProcesses = Process.GetProcesses(Environment.MachineName);
bool isHostAlive = false;
foreach (Process localProc in localProcesses)
{
if (localProc.ProcessName == "processIneed")
{
isHostAlive = true;
}
}
if (!isHostAlive)
{
try
{
Process.Start(Application.StartupPath + @"\bin\processIneed.exe");
}
....
现在,我要做的是添加一个安装程序类,在其中我重写Commit方法,并在那里激活了进程,因此该进程将在安装应用程序后自动运行。看起来像这样:
string path = Context.Parameters["targetdir"].Replace(@"\\", @"\");
path += @"bin\processIneed.exe";
Process.Start(path);
问题是,以旧的方式,如果在安装过程中未激活该过程,则一切运行正常。当我以已实现的新方式启动流程时,我看到路径正在正确构建,并且流程确实在背景中运行,但是应用程序无法正常运行。它有点“一半”。我没有收到任何错误或异常,但这只是行不通。
我注意到的唯一区别是,对于旧代码,该过程以登录到Windows的用户名(在登录屏幕中输入的用户名和密码)启动,而在新代码中,该过程在用户< cc>。
有没有办法使用正确的凭据从安装程序类启动该过程?我想说明一下,我不想以某种方式向用户请求密码,也不想保存它或其他东西。.只是从当前登录的凭据而不是SYSTEM用户开始。
最佳答案
在此处尝试此链接,它似乎与您要查找的Run process under current user类似
关于c# - 进程没有以正确的用户名开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17909652/