我有一个我编写的批处理文件(概念证明)来安装我也创建的示例服务。它包含以下命令行:
sc create serviceTest binPath= C:\Sandbox\ServiceTest\ServiceTest.exe DisplayName= "Service Test"
当我右键单击并选择“以管理员身份运行”时,一切都按预期运行。在不执行此操作的情况下运行批处理文件会出现“拒绝访问”。这证明该命令有效。
我也试过通过Process.Start()运行sc命令:
const string sc = @"sc";
const string arguments = @"create serviceTest binpath= {0} DisplayName= ""Service Test""";
FileInfo fi = new FileInfo(this.txtServiceLocation.Text);
if (fi.Exists)
{
ProcessStartInfo psi = new ProcessStartInfo()
{
FileName = sc,
Arguments = string.Format(arguments, fi.FullName),
UserName = "admin",
Password = "secret".ToSecureString(),
Domain = "MYDOMAIN",
WorkingDirectory = fi.DirectoryName,
CreateNoWindow = true,
UseShellExecute = false
};
Process.Start(psi);
}
else
MessageBox.Show("The service exe could not be found.");
我需要能够以编程方式执行此操作。我需要做些什么才能让它发挥作用?
澄清:我需要能够在没有提示用户的情况下执行此操作。此代码将在自定义tfs构建过程下运行。
答案 0 :(得分:1)
默认情况下,在Windows 7中,运行具有最小权限访问(非管理员)控制的大多数应用程序。当您的应用程序尝试修改系统时,需要将其提升为Admin权限才能成功运行。如果您想让此应用永久运行管理员权限,请按照链接中的说明进行操作
http://www.groovypost.com/howto/microsoft/automatically-run-any-application-as-admin-in-windows-7/
答案 1 :(得分:0)
您需要向程序集添加UAC清单文件,以强制UAC以管理员身份运行该进程。有关其他解决方案的参考,您可以看到UAC need for console application。
答案 2 :(得分:0)
虽然我从来没有这个工作,但我仍然可以通过代码使用模拟,并确保tfs构建帐户具有适当的访问权限。这就是我必须要做的事情。