[英]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.