执行过程不起作用

时间:2014-12-29 10:17:57

标签: c# .net service process

情况:

  

我想通过执行dirquota.exe的进程修改FileServer上的文件夹配额   

问题:

  

正在执行的流程完全没有结果   

到目前为止:

  

我重定向了在我的FileServer上执行的进程和参数,以便仔细查看服务器端上发生的情况。   

  执行过程没有例外,一切都很好,似乎......   当我在FileServer上查看当前文件夹配额时,没有任何改变..
我决定将我的参数复制粘贴到服务器上的CMD.exe中,然后一切都很顺利......   我无法理解为什么它不能在我的FileServer上工作,可能很简单,但我需要一些帮助   

重要信息:

  

我正在我的FileServer上安装Windows服务并通过SOUPUI调用Method(这一切都正常)。   
  
  已安装的服务作为域管理员运行,并具有执行这些操作所需的所有权限

班级

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;
        }

2 个答案:

答案 0 :(得分:1)

发现问题

  

使用Windows-on Windows 64位重定向重定向dirquota.exe。发生的事情是我的启动请求(来自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;
        }

答案 1 :(得分:0)

最好,如果您可以将Process的输出重定向到日志文件,并查看实际的异常是什么..

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();

记录输出值以获取执行此命令导致的确切异常