我正在更新应用程序。旧代码有一个 main 方法,它遍历 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 的用户名下启动的(在登录屏幕中输入的用户名和密码),而在新代码中,进程在 user 下启动SYSTEM
。
有没有办法使用正确的凭据从安装程序类开始该过程?我想澄清一下,我不想以某种方式从用户那里请求密码,也不想保存它或其他什么.. 只需从当前登录的凭据开始,而不是从 SYSTEM 用户开始。