2

我有一个我编写的批处理文件(概念证明)来安装我也创建的示例服务。它包含以下命令行:

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 构建过程下运行。

4

3 回答 3

1

默认情况下,在 Windows 7 中,以最低权限访问(非管理员)控制运行大多数应用程序。当您的应用程序尝试修改系统时,需要将其提升到管理员权限才能成功运行。如果您想让此应用程序永久以管理员权限运行,请按照链接中的说明进行操作

http://www.groovypost.com/howto/microsoft/automatically-run-any-application-as-admin-in-windows-7/

于 2012-04-17T20:31:04.303 回答
0

虽然我从来没有让它工作,但我仍然可以通过代码使用模拟,并确保 tfs 构建帐户具有适当的访问权限。这是我必须做的。

于 2013-05-21T19:26:43.560 回答
0

您需要将 UAC 清单文件添加到您的程序集中,以强制 UAC 以管理员身份运行该进程。有关其他解决方案的参考,您可以查看UAC 对控制台应用程序的需求

于 2012-04-17T20:59:36.530 回答