2011-04-29 76 views
1

我运行一个Web服务器上的一些ASP.NET/C#代码的批处理文件运行。基本上,批处理文件使用psloggedon和pexec等工具在VM上执行一些测试自动化任务。确保的Process.Start()下的登录用户

如果我手动运行该批处理文件时,我下的管理帐户登录到服务器,它工作正常。

,当我从我的代码(下)运行它我的问题来了,这似乎给“SYSTEM”帐户下运行,并psloggedon等似乎不正常工作。

代码

 Process p = new Process(); 
    p.StartInfo.FileName = "C:\SetupVM.bat"; 
    p.Start(); 
    p.WaitForExit(); 

我在我的web.config得到这个,它似乎并没有做任何迪菲昂斯?

<identity impersonate="true" userName="Administrator" password="myadminpassword"/> 

是否有无论如何我可以确保批处理文件在'管理员'帐户下运行?

更新的代码

 Process p = new Process(); 
     p.StartInfo.FileName = "C:\\SetupVM.bat"; 
     p.StartInfo.UserName = "Administrator"; 
     p.StartInfo.UseShellExecute = false; 
     p.StartInfo.WorkingDirectory = "C:\\"; 

     string prePassword = "myadminpassword"; 
     SecureString passwordSecure = new SecureString(); 
     char[] passwordChars = prePassword.ToCharArray(); 
     foreach (char c in passwordChars) 
     { 
      passwordSecure.AppendChar(c); 
     } 
     p.StartInfo.Password = passwordSecure; 
     p.Start(); 
     p.WaitForExit(); 

从MSDN:

当UseShellExecute是假的,你就可以开始只与Process组件可执行文件。

也许这是因为我试图运行.bat文件的问题?

谢谢。

+0

嗨,你有没有解决这个问题我已经试过相同,但还是它不工作 – sudheshna 2012-05-07 08:52:53

回答

4

你可以提供给StartInfo用户名和密码:

Process p = new Process(); 
p.StartInfo.FileName = "C:\SetupVM.bat"; 
p.StartInfo.UserName = "Administrator"; 
p.StartInfo.Password = "AdminPassword"; 
p.Start(); 
p.WaitForExit(); 

查看文档ProcessStartInfo

+0

谢谢,我已经试过这个,但现在我的代码似乎立即返回,而不该批处理文件运行?我在我的问题中添加了更新的代码,您是否介意快速浏览一下? – 2011-04-29 15:00:41

+0

@Jimmy C - 看不到任何让我感觉错误的东西。 – Oded 2011-04-29 15:43:23

+0

是的很奇怪。我可以看到cmd.exe在事件查看器中发生故障,不知道为什么。 – 2011-04-29 15:59:21