我正在努力续订申请。旧代码有一个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的用户名(在登录屏幕中输入的用户名和密码)下启动的,而在新代码中,进程是从用户SYSTEM
。
有没有办法从安装程序类启动具有正确凭据的进程?我想澄清一点,我不想以某种方式从用户那里请求密码,我不想保存它或者什么......只是从当前登录的凭据开始而不是用SYSTEM用户。