2012-04-17 119 views
2

私が作成したサンプルサービスをインストールするためのバッチファイルがあります。これには、次のコマンドラインが含まれています。SC.EXE - C#からの呼び出し - アクセスが拒否されました

右クリックして[管理者として実行]を選択すると、すべてが期待通りに実行されます。これを行わずにバッチファイルを実行すると、 'Access Denied'となります。これはコマンドが機能することを証明しています。私はプログラム的にこれを行うことができるようにする必要があり

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."); 

は、私はまた、Process.Start()を経由してscコマンドを実行しようとしています。これを機能させるには何が必要ですか?

CLARIFICATION:ユーザーに確認を求めずにこれを行う必要があります。このコードはカスタムtfsビルドプロセスで実行されます。

+1

ご質問のとおり、管理者ユーザー(_RunはAdministrator_)から呼び出されたときに機能しますので、既にそれを動作させる方法を知っています。限られたユーザーしかWindowsサービスをインストールできないため、基本的には不運です。 –

+1

[Windows 7でC#アプリケーションを管理者として実行する方法]の複製可能性(http://stackoverflow.com/questions/2818179/how-to-force-c-sharp-app-to-run-as-administrator) -on-windows-7) –

答えて

0

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

1

デフォルトでは、Windows 7では、アクセス権の低い(管理者以外の)コントロールを使用してほとんどのアプリケーションを実行します。アプリケーションがシステムを変更しようとすると、正常に動作するためには管理者特権に昇格する必要があります。このアプリは、永続的に管理者権限で実行するようにしたい場合はあなたが実行するためにUACを強制するために、あなたのアセンブリにUACマニフェストファイルを追加する必要が

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

0

リンクのように、指示に従ってください。管理者として処理します。他のソリューションへの参照については、UAC need for console applicationを参照してください。

+0

残念ながら、これはカスタムプロセスの一部としてtfsから実行されるため、誰もOKをクリックして管理者として実行することはできません。ユーザーの介入なしに完全に動作するためには、この機能が必要です。 –