情况:
我想通过执行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;
}
答案 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();
记录输出值以获取执行此命令导致的确切异常