【问题标题】:Process to export svn files hangs with Process.Start()使用 Process.Start() 导出 svn 文件的进程挂起
【发布时间】:2013-04-16 10:39:43
【问题描述】:

我尝试执行 .cmd 以从 SVN 导出文件,它在我的本地机器上手动运行(WS2003 SP2 IIS 身份:本地系统),但在执行服务器中失败(相同的配置)。

我执行的脚本是:

echo.%Date%-%Time%- Username %username%>>c:\vpcheckcode\logsvn.txt

svn export %svnUrl% %srcFolder% --force --username %usr% --password %psw%

如果我只是尝试复制一个文件,没有 svn,它可以工作。

当我手动执行它时,它会记录我的用户并导出文件。 在开发PC上它不记录用户但它工作,在执行服务器它不记录用户并且它不工作。

我尝试以这种方式执行 .cmd:

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
startInfo.FileName = strFileName;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;

startInfo.Arguments = svnUrl + " " + srcFolder+ " " + usr+" "+psw;

using (Process exeProcess = Process.Start(startInfo))
{
    pid = exeProcess.Id;
    EventLog.WriteEntry("VPCheckCodeSrvDll.ExecuteScriptSVN", "avviato pid svn: " + pid.ToString(), EventLogEntryType.Warning);

    if (!exeProcess.WaitForExit((int)_svnExportTimeout))
    {
        exeProcess.Kill();

进程挂起,直到它被杀死。

C:\Documents and Settings\myuser>tlist 4980
4980 cmd.exe
   CWD:     c:\windows\system32\inetsrv\
   CmdLine: cmd /c ""C:\ANALISI\000000-xx-v90\SVN\svnExport.cmd"    https://svn.mysite.local/repos/HA/branches/H
   VirtualSize:    11332 KB   PeakVirtualSize:    15492 KB
   WorkingSetSize:  1832 KB   PeakWorkingSetSize:  1848 KB
   NumberOfThreads: 1
   2704 Win32StartAddr:0x4ad07670 LastErr:0x000000cb State:Waiting
  5.2.3790.3959 shp  0x4AD00000  cmd.exe
  5.2.3790.4937 shp  0x7C800000  ntdll.dll
  5.2.3790.5069 shp  0x77E40000  kernel32.dll
  7.0.3790.3959 shp  0x77BA0000  msvcrt.dll
  5.2.3790.4455 shp  0x7D1E0000  ADVAPI32.dll
  5.2.3790.4759 shp  0x77C50000  RPCRT4.dll
  5.2.3790.4455 shp  0x76F50000  Secur32.dll
  5.2.3790.4033 shp  0x77380000  USER32.dll
  5.2.3790.4396 shp  0x77C00000  GDI32.dll
  5.2.3790.3959 shp  0x71BD0000  MPR.dll
  5.2.3790.3959 shp  0x76290000  IMM32.DLL

有什么建议吗?

【问题讨论】:

    标签: c# .net svn iis process


    【解决方案1】:

    我做了类似的事情。请尝试以下操作:

    更改:startInfo.Arguments = svnUrl + " " + srcFolder+ " " + usr+" "+psw;

    to : startInfo.Arguments = String.Format("{0} \"{1}\" --username {2} --password {3}", svnUrl, srcFolder, usr, psw);

    我假设您的 usr 和 psw 变量不包含用于颠覆的参数信息。另外,我的目的地包括文件名(我看不到你的完整命令行,因为它被截断了)并且还包含空格,所以我不得不用引号将它括起来。如果你有空格,你的 svnUrl 应该用“%20”代替空格(同样,完整的 URL 不可见)。

    【讨论】:

    • 抱歉,回复太快了。我忽略了建议尝试在没有脚本的情况下使该过程正常工作。因此,替换 startInfo.FileName = strFileName;使用 startInfo.FileName = "svn" 我也忽略了在 startInfo.Arguments (String.Format("export {0} \"{1}\" --username {2 } --password {3}", svnUrl, srcFolder, usr, psw);)
    • 谢谢你,罗德,我试过了,但还是不行。如果我直接执行该脚本,它就可以工作,但它不能从 Process.Start() 工作。我认为它必须与用户授权有关。
    猜你喜欢
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    相关资源
    最近更新 更多