2013-01-16 85 views
1

我正在嘗試在C#中使用Drush進行Drupal站點安裝,作爲使用MSI的完整Windows Server站點安裝的一部分。 我正在使用的Drush命令是以下一個。在C#中使用Drush站點安裝#

C:\ProgramData\Drush\Drush.bat -y si application_name --db-url=sqlsrv://admin_name:password(local)\SQLEXPRESS:/database_name --account-name=admin [email protected] --account-pass=Password1234 --site-mail="[email protected]" --site-name="Site Name" install_configure_form.site_default_country=GB install_configure_form.date_default_timezone="Europe/London" 

從工作目錄(inetpub \ application_name)中運行cmd.exe時,此功能完美。

將上述代碼放入代碼並在安裝過程中執行並始終導致出現以下錯誤(每次使用不同的文件名)時,會出現此問題。

無法解壓縮C:\ ProgramData \ Drush \ lib中\ druFD63.tmp.gz

正在使用的C#代碼以執行該命令如下:

public static ActionResult Drush_Configuration(Session session) 
    {  
     string strArgs = "-y si application_name --db-url=sqlsrv://admin_name:password(local)\SQLEXPRESS:/database_name --account-name=admin [email protected] --account-pass=Password1234 --site-mail="[email protected]" --site-name="Site Name" install_configure_form.site_default_country=GB install_configure_form.date_default_timezone="Europe/London"; 
     string strExeCmd = @"C:\ProgramData\Drush\Drush.bat "; 
     strExeCmd = strExeCmd + strArgs; 
     string strLocation = @"C:\inetpub\application_name"; 

     session.Log("Starting Drush Configuration"); 
     session.Log("Command line is: " + strExeCmd + " " + strArgs); 

     int exitCode; 
     ProcessStartInfo processInfo; 
     Process process; 
     try 
     { 
      processInfo = new ProcessStartInfo("cmd.exe", "/c " + strExeCmd); 
      processInfo.WorkingDirectory = strLocation; 
      processInfo.WindowStyle = ProcessWindowStyle.Normal; 
      processInfo.CreateNoWindow = true; 
      processInfo.UseShellExecute = false; 
      // *** Redirect the output *** 
      processInfo.RedirectStandardError = true; 
      processInfo.RedirectStandardOutput = true; 

      process = Process.Start(processInfo); 
      process.WaitForExit(); 

      // *** Read the streams *** 
      string output = process.StandardOutput.ReadToEnd(); 
      string error = process.StandardError.ReadToEnd(); 

      exitCode = process.ExitCode; 

      session.Log("output>>" + (String.IsNullOrEmpty(output) ? "(none)" : output)); 
      session.Log("error>>" + (String.IsNullOrEmpty(error) ? "(none)" : error)); 
      session.Log("ExitCode: " + exitCode.ToString(), "ExecuteCommand"); 
      process.Close(); 
     } 
     catch (Exception e) 
     { 
      session.Log("Error: " + e); 
      return ActionResult.Failure; 
     } 

     session.Log("Drush Configuration completed successfully"); 
     return ActionResult.Success; 
    } 

而如上所述,這總是導致「無法解壓縮」錯誤。

有沒有人曾經使用c#在Drush中運行Site-Install?有沒有人知道爲什麼這樣執行時可能會失敗?

任何想法或建議將不勝感激。

我正在使用Drush-5.8-2012-12-10-Installer-v1.0.20,Drupal 7和Windows Server 2008 R2 x64。

+1

在我看來'strExeCmd'以'Drush.bat'結尾兩次。嘗試從'strArgs'中刪除它。 –

回答

1

這個問題的原因是環境變量。 Drush MSI安裝程序設置用戶路徑環境變量,這些變量在MSI機器上下文中不被識別。
因此,通過將Drush,GnuWin32和PHP的系統路徑變量添加到站點安裝MSI,可以通過程序安裝該站點。

+1

記住你可以接受你自己的答案;通過這種方式,其他用戶會知道這是適合您的解決方案。 – kiamlaluno