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

UACに管理者としてプロセスを実行させるには、UACマニフェストファイルをアセンブリに追加する必要があります。他のソリューションへの参照については、コンソールアプリケーションに対するUACの必要性を確認できます。

于 2012-04-17T20:59:36.530 に答える
0

これを機能させることはできませんでしたが、コードを介して偽装を使用し、tfsビルドアカウントに適切なアクセス権があることを確認することもできます。これは私がしなければならなかったことです。

于 2013-05-21T19:26:43.560 に答える