2014-12-29 25 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

是的。我发现了这个问题,看看我上面的答案 –