簡體   English   中英

SC.EXE-從C#調用-訪問被拒絕

[英]SC.EXE - Calling from C# - Access Denied

我有一個編寫的批處理文件(概念證明),用於安裝我也創建的示例服務。 它包含以下命令行:

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構建過程中運行。

默認情況下,在Windows 7中,運行具有最小特權訪問權限(非管理員)控制的大多數應用程序。 當您的應用程序嘗試修改系統時,需要將其提升為管理員特權才能成功運行。 如果您想讓此應用永久以管理員權限運行,請按照鏈接中的說明進行操作

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

您需要將UAC清單文件添加到程序集中,以強制UAC以管理員身份運行該過程。 有關其他解決方案的參考,您可以看到UAC需要控制台應用程序

雖然我從來沒有做過這個工作,但是我仍然可以通過代碼使用模擬,並且還可以確保tfs構建帳戶具有適當的訪問權限。 這就是我要做的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM