2014-12-29 66 views
1

情況:執行過程不工作

我想通過一個進程中執行dirquota.exe

的問題來修改文件服務器我的文件夾配額:

正在執行的進程在所有

到目前爲止:

我重定向的過程和我的文件服務器執行來仔細看看發生了什麼事究竟在服務器端的參數。

的執行過程中沒有給出例外,一切都蠻好,它似乎.. 當在當前文件夾配額找我FILESERVER什麼也沒有改變..
我決定複製粘貼到CMD我的論點。在服務器上的exe文件,然後這一切都很好...
我想不通爲什麼它不工作對我的文件服務器,大概財產以後簡單,但我在這裏需要一些幫助

重要信息:

我在我的FileServer上安裝Windows服務,並通過SOUPUI調用方法(這一切工作正常)。

安裝的服務正在運行的域管理員,並擁有所有必要的權利,執行這些操作

的Class

public class Quota 
    { 
     public string FolderLocation; 
     public int SizeInMB; 
     public string FileServerName; 
    } 

的方法

public string SetFolderQuota(Quota quota) 
     { 
      Process QuotaProcess = new Process(); 

      QuotaProcess.StartInfo.RedirectStandardOutput = false;    
      QuotaProcess.StartInfo.FileName = @"cmd.exe"; 
      QuotaProcess.StartInfo.UseShellExecute = true; 
      QuotaProcess.StartInfo.Arguments = "/C " + "dirquota Quota Add /PATH:" + '"' + quota.FolderLocation + '"' + " /Limit:" + quota.SizeInMB + "mb" + " /remote:" + quota.FileServerName; 

      try 
      {     
       QuotaProcess.Start(); 
      } 
      catch(Exception Ex) 
      { 
       return Ex.Message; 
      } 

      return "Correctly Executed: " + QuotaProcess.StartInfo.FileName + QuotaProcess.StartInfo.Arguments; 
     } 
+1

你能嘗試在你的論點中指定dirquota的完整路徑?這可能是它無法找到dirquota(儘管可能不太可能)。 – kha

+0

也試過了,結果一樣。好的想法雖然 –

回答

1

發現問題

dirquota.exe使用Windows的上Windows 64位重定向重定向。發生的事情是,我的啓動請求(來自32位進程)正被重定向到%windir%\ SysWOW64 \ dirquota.exe。由於在64位安裝中沒有此特定可執行文件的32位版本,因此啓動失敗。要繞過這個過程中,讓我的32位進程訪問本地(64位)的路徑,我必須引用%WINDIR%\ sysnative代替

守則

public string SetFolderQuota(Quota quota) 
     { 

      string FileLocation = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows),@"sysnative\dirquota.exe"); 

      Process QuotaProcess = new Process(); 

      QuotaProcess.StartInfo.RedirectStandardOutput = false; 
      QuotaProcess.StartInfo.FileName = FileLocation; 
      QuotaProcess.StartInfo.UseShellExecute = true; 
      QuotaProcess.StartInfo.Arguments = " Quota Add /PATH:" + '"' + quota.FolderLocation + '"' + " /Limit:" + quota.SizeInMB + "mb" + " /remote:" + quota.FileServerName; 

      try 
      {     
       QuotaProcess.Start(); 
      } 
      catch(Exception Ex) 
      { 
       return Ex.Message + Environment.NewLine + "FileLocation: " + FileLocation; 
      } 

      return "Correctly Executed: " + QuotaProcess.StartInfo.FileName + QuotaProcess.StartInfo.Arguments; 
     } 
0

最好的,如果你能處理的輸出重定向到一個日誌文件,看看什麼是真正的例外..

ProcessStartInfo process = new ProcessStartInfo 
{ 
    CreateNoWindow = false, 
    UseShellExecute = false, 
    RedirectStandardOutput = true, 
    FileName = @"cmd.exe", 
    Arguments = "/C " + "dirquota Quota Add /PATH:" + '"' + quota.FolderLocation + '"' + " /Limit:" + quota.SizeInMB + "mb" + " /remote:" + quota.FileServerName 
}; 

Process p = Process.Start(process); 
string output = p.StandardOutput.ReadToEnd(); 

日誌輸出的值出現因執行此命令的確切異常

+0

沒有例外......我已經嘗試過了,回覆爲空 –

+0

您確定服務運行的帳戶是系統管理員或管理員組的成員? –

+1

是的。我發現了這個問題,看看我上面的答案 –