在c#如何使用登录用户启动新进程?

时间:2012-10-01 10:48:21

标签: c# .net

以下是该方案。

  1. 使用用户名“JOHN”
  2. 登录Windows
  3. 在c#中运行Windows应用程序writtern。此工具名称为BootStrapper.exe。但是我使用“运行方式”功能使用名为“ALEX”的不同用户执行此工具。
  4. Boot strapper将显示一个名为“Launch Application”的按钮。单击使用c#的Process类启动执行Application.exe。请注意,我没有传递任何用户名和密码。因此,Application.exe也在“ALEX”用户下运行。
  5. 如何从Bootstrapper.exe运行“JOHN”下的Application.exe,即使它是由“ALEX”启动的。 请注意,Application.exe无法识别“JOHN”的密码以模拟JOHN用户。

2 个答案:

答案 0 :(得分:1)

在JOHN启动的进程中托管WCF服务(可能将其放在启动文件夹中)。

使用命令告知ALEX进程启动哪个进程,从ALEX进程调用WCF服务 从WCF服务启动该进程,它将作为JOHN运行。

答案 1 :(得分:0)

我为我糟糕的英语道歉。也许我错了你...编译它,并将结果复制到“C:\ test”目录。现在运行它。

using System;
using System.Text;
using System.Diagnostics;
using System.Security;
using System.Reflection;
using System.IO;

namespace ConsoleApplication6 {
    class Program {

        unsafe static void Main(string[] args) {

            Process process = new Process();
            String dir = Path.GetDirectoryName(typeof(Program).Assembly.Location);

            String txtFile = Path.Combine(dir, "example.txt");
            if (!File.Exists(txtFile)) {
                StreamWriter sw = File.CreateText(txtFile);
                sw.Close();
                sw.Dispose();
            }

            ProcessStartInfo info = new ProcessStartInfo();

            info.Domain = "myDomainName";
            info.UserName = "userName";
            String pass = "userPassword";

            fixed (char* password = pass) {
                info.Password = new SecureString(password, pass.Length);
            }

            // Will be run notepad.exe
            info.FileName = Environment.ExpandEnvironmentVariables(@"%winDir%\NOTEPAD.EXE");
            // in notepad.exe will be open example.txt file.
            info.Arguments = txtFile;
            info.LoadUserProfile = false;
            info.UseShellExecute = false;
            info.WorkingDirectory = dir;

            process.StartInfo = info;
            process.Start();
        }
    }
}

此致