Main.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537
  1. /*
  2. * Copyright (c) Contributors, http://opensimulator.org/
  3. * See CONTRIBUTORS.TXT for a full list of copyright holders.
  4. *
  5. * Redistribution and use in source and binary forms, with or without
  6. * modification, are permitted provided that the following conditions are met:
  7. * * Redistributions of source code must retain the above copyright
  8. * notice, this list of conditions and the following disclaimer.
  9. * * Redistributions in binary form must reproduce the above copyright
  10. * notice, this list of conditions and the following disclaimer in the
  11. * documentation and/or other materials provided with the distribution.
  12. * * Neither the name of the OpenSim Project nor the
  13. * names of its contributors may be used to endorse or promote products
  14. * derived from this software without specific prior written permission.
  15. *
  16. * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
  17. * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  18. * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  19. * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
  20. * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  21. * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  22. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  23. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  24. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  25. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  26. *
  27. */
  28. using System;
  29. using System.Collections.Generic;
  30. using System.ComponentModel;
  31. using System.Data;
  32. using System.Drawing;
  33. using System.Text;
  34. using System.Windows.Forms;
  35. namespace OpenSim.GUI
  36. {
  37. public partial class Main : Form
  38. {
  39. public ProcessManager proc_OpenSim;
  40. public ProcessManager proc_UserServer;
  41. public ProcessManager proc_GridServer;
  42. public ProcessManager proc_AssetServer;
  43. public Main()
  44. {
  45. InitializeComponent();
  46. }
  47. private void Main_Load(object sender, EventArgs e)
  48. {
  49. txtInputUserServer.KeyPress += new KeyPressEventHandler(txtInputUserServer_KeyPress);
  50. txtInputGridServer.KeyPress += new KeyPressEventHandler(txtInputGridServer_KeyPress);
  51. txtInputAssetServer.KeyPress += new KeyPressEventHandler(txtInputAssetServer_KeyPress);
  52. txtInputRegionServer.KeyPress += new KeyPressEventHandler(txtInputRegionServer_KeyPress);
  53. tabLogs.Selected += new TabControlEventHandler(tabLogs_Selected);
  54. UpdateTabVisibility();
  55. }
  56. void tabLogs_Selected(object sender, TabControlEventArgs e)
  57. {
  58. if (e.TabPage == tabUserServer)
  59. txtInputUserServer.Focus();
  60. if (e.TabPage == tabGridServer)
  61. txtInputGridServer.Focus();
  62. if (e.TabPage == tabAssetServer)
  63. txtInputAssetServer.Focus();
  64. if (e.TabPage == tabRegionServer)
  65. txtInputRegionServer.Focus();
  66. }
  67. void txtInputUserServer_KeyPress(object sender, KeyPressEventArgs e)
  68. {
  69. if (e.KeyChar == 13)
  70. {
  71. // We got a command
  72. e.Handled = true;
  73. proc_UserServer.StandardInput.WriteLine(txtInputUserServer.Text + "\r\n");
  74. txtInputUserServer.Text = "";
  75. }
  76. }
  77. void txtInputGridServer_KeyPress(object sender, KeyPressEventArgs e)
  78. {
  79. if (e.KeyChar == 13)
  80. {
  81. // We got a command
  82. e.Handled = true;
  83. proc_GridServer.StandardInput.WriteLine(txtInputGridServer.Text + "\r\n");
  84. txtInputGridServer.Text = "";
  85. }
  86. }
  87. void txtInputAssetServer_KeyPress(object sender, KeyPressEventArgs e)
  88. {
  89. if (e.KeyChar == 13)
  90. {
  91. // We got a command
  92. e.Handled = true;
  93. proc_AssetServer.StandardInput.WriteLine(txtInputAssetServer.Text + "\r\n");
  94. txtInputAssetServer.Text = "";
  95. }
  96. }
  97. void txtInputRegionServer_KeyPress(object sender, KeyPressEventArgs e)
  98. {
  99. if (e.KeyChar == 13)
  100. {
  101. // We got a command
  102. e.Handled = true;
  103. proc_OpenSim.StandardInput.WriteLine(txtInputRegionServer.Text + "\r\n");
  104. txtInputRegionServer.Text = "";
  105. }
  106. }
  107. private void btnStart_Click(object sender, EventArgs e)
  108. {
  109. noProbe1.Checked = true;
  110. multiple1.Checked = true;
  111. loginuri1.Checked = true;
  112. login1.Checked = true;
  113. //
  114. // THIS PART NEEDS TO BE MOVED TO A SEPARATE THREAD OR A TIMER OF SOME SORT
  115. // should not block on wait
  116. // ALSO - IF SOME SERVICES ARE NOT CONFIGURED, POP UP CONFIGURATION BOX FOR THAT SERVICE!
  117. //
  118. btnStart.Enabled = false;
  119. btnStop.Enabled = false;
  120. if (rbGridServer.Checked)
  121. {
  122. // Start UserServer
  123. proc_UserServer = new ProcessManager("OpenSim.Grid.UserServer.exe", "");
  124. txtMainLog.AppendText("Starting: User server" + "\r\n");
  125. proc_UserServer.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(proc_UserServer_DataReceived);
  126. proc_UserServer.ErrorDataReceived += new System.Diagnostics.DataReceivedEventHandler(proc_UserServer_DataReceived);
  127. proc_UserServer.StartProcess();
  128. System.Threading.Thread.Sleep(3000);
  129. // Start GridServer
  130. proc_GridServer = new ProcessManager("OpenSim.Grid.GridServer.exe", "");
  131. txtMainLog.AppendText("Starting: Grid server" + "\r\n");
  132. proc_GridServer.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(proc_GridServer_DataReceived);
  133. proc_GridServer.ErrorDataReceived += new System.Diagnostics.DataReceivedEventHandler(proc_GridServer_DataReceived);
  134. proc_GridServer.StartProcess();
  135. System.Threading.Thread.Sleep(3000);
  136. // Start AssetServer
  137. proc_AssetServer = new ProcessManager("OpenSim.Grid.AssetServer.exe", "");
  138. txtMainLog.AppendText("Starting: Asset server" + "\r\n");
  139. proc_AssetServer.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(proc_AssetServer_DataReceived);
  140. proc_AssetServer.ErrorDataReceived += new System.Diagnostics.DataReceivedEventHandler(proc_AssetServer_DataReceived);
  141. proc_AssetServer.StartProcess();
  142. System.Threading.Thread.Sleep(3000);
  143. }
  144. // Start OpenSim
  145. string p = "";
  146. if (rbGridServer.Checked)
  147. p = "-gridmode=true";
  148. proc_OpenSim = new ProcessManager("OpenSim.EXE", p);
  149. txtMainLog.AppendText("Starting: OpenSim (Region server)" + "\r\n");
  150. proc_OpenSim.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(proc_OpenSim_DataReceived);
  151. proc_OpenSim.ErrorDataReceived += new System.Diagnostics.DataReceivedEventHandler(proc_OpenSim_DataReceived);
  152. proc_OpenSim.StartProcess();
  153. btnStart.Enabled = false;
  154. btnStop.Enabled = true;
  155. }
  156. public delegate void AppendText(string Text);
  157. void proc_UserServer_DataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
  158. {
  159. this.Invoke(new AppendText(txtUserServer.AppendText), new object[] { e.Data + "\r\n" });
  160. this.Invoke(new AppendText(txtMainLog.AppendText), new object[] { "UserServer: " + e.Data + "\r\n" });
  161. }
  162. void proc_GridServer_DataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
  163. {
  164. this.Invoke(new AppendText(txtGridServer.AppendText), new object[] { e.Data + "\r\n" });
  165. this.Invoke(new AppendText(txtMainLog.AppendText), new object[] { "GridServer: " + e.Data + "\r\n" });
  166. }
  167. void proc_AssetServer_DataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
  168. {
  169. this.Invoke(new AppendText(txtAssetServer.AppendText), new object[] { e.Data + "\r\n" });
  170. this.Invoke(new AppendText(txtMainLog.AppendText), new object[] { "AssetServer: " + e.Data + "\r\n" });
  171. }
  172. void proc_OpenSim_DataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
  173. {
  174. this.Invoke(new AppendText(txtOpenSim.AppendText), new object[] { e.Data + "\r\n" });
  175. this.Invoke(new AppendText(txtMainLog.AppendText), new object[] { "OpenSim: " + e.Data + "\r\n" });
  176. }
  177. private void btnStop_Click(object sender, EventArgs e)
  178. {
  179. btnStart.Enabled = false;
  180. btnStop.Enabled = false;
  181. Stop();
  182. btnStart.Enabled = true;
  183. btnStop.Enabled = false;
  184. }
  185. private void clear1_Click(object sender, EventArgs e)
  186. {
  187. noProbe1.Checked = false; multiple1.Checked = false; loginuri1.Checked = false;
  188. noMultiple1.Checked = false; korean1.Checked = false; spanish1.Checked = false;
  189. ignorepixeldepth1.Checked = false; nothread1.Checked = false; safe1.Checked = false;
  190. noconsole1.Checked = false; log1.Checked = false; helperuri1.Checked = false;
  191. autologin1.Checked = false; dialog1.Checked = false; previous1.Checked = false;
  192. simple1.Checked = false; noinvlib1.Checked = false; noutc1.Checked = false;
  193. debugst1.Checked = false; local1.Checked = false; purge1.Checked = false;
  194. nofmod1.Checked = false; nosound1.Checked = false; noaudio1.Checked = false;
  195. url1.Checked = false; port1.Checked = false; drop1.Checked = false;
  196. inbw1.Checked = false; outbw1.Checked = false; settings1.Checked = false;
  197. logfile1.Checked = false; yield1.Checked = false; techTag1.Checked = false;
  198. quitAfter1.Checked = false; loginuri1.Checked = false; set1.Checked = false;
  199. errmask1.Checked = false; raw1.Checked = false; skin1.Checked = false;
  200. user1.Checked = false; login1.Checked = false;
  201. }
  202. private void Stop()
  203. {
  204. if (proc_UserServer != null)
  205. {
  206. txtMainLog.AppendText("Shutting down UserServer. CPU time used: " + proc_UserServer.TotalProcessorTime.ToString() + "\r\n");
  207. proc_UserServer.StopProcess();
  208. proc_UserServer = null;
  209. }
  210. if (proc_GridServer != null)
  211. {
  212. txtMainLog.AppendText("Shutting down GridServer. CPU time used: " + proc_GridServer.TotalProcessorTime.ToString() + "\r\n");
  213. proc_GridServer.StopProcess();
  214. proc_GridServer = null;
  215. }
  216. if (proc_AssetServer != null)
  217. {
  218. txtMainLog.AppendText("Shutting down AssetServer. CPU time used: " + proc_AssetServer.TotalProcessorTime.ToString() + "\r\n");
  219. proc_AssetServer.StopProcess();
  220. proc_AssetServer = null;
  221. }
  222. if (proc_OpenSim != null)
  223. {
  224. txtMainLog.AppendText("Shutting down OpenSim. CPU time used: " + proc_OpenSim.TotalProcessorTime.ToString() + "\r\n");
  225. proc_OpenSim.StopProcess();
  226. proc_OpenSim = null;
  227. }
  228. }
  229. private void UpdateTabVisibility()
  230. {
  231. if (rbStandAloneMode.Checked)
  232. {
  233. if (tabLogs.TabPages.Contains(tabUserServer))
  234. tabLogs.TabPages.Remove(tabUserServer);
  235. if (tabLogs.TabPages.Contains(tabGridServer))
  236. tabLogs.TabPages.Remove(tabGridServer);
  237. if (tabLogs.TabPages.Contains(tabAssetServer))
  238. tabLogs.TabPages.Remove(tabAssetServer);
  239. }
  240. else
  241. {
  242. if (!tabLogs.TabPages.Contains(tabUserServer))
  243. tabLogs.TabPages.Add(tabUserServer);
  244. if (!tabLogs.TabPages.Contains(tabGridServer))
  245. tabLogs.TabPages.Add(tabGridServer);
  246. if (!tabLogs.TabPages.Contains(tabAssetServer))
  247. tabLogs.TabPages.Add(tabAssetServer);
  248. }
  249. }
  250. private void rbStandAloneMode_CheckedChanged(object sender, EventArgs e)
  251. {
  252. UpdateTabVisibility();
  253. }
  254. private void rbGridRegionMode_CheckedChanged(object sender, EventArgs e)
  255. {
  256. UpdateTabVisibility();
  257. }
  258. private void rbGridServer_CheckedChanged(object sender, EventArgs e)
  259. {
  260. UpdateTabVisibility();
  261. }
  262. private int counter;
  263. private void Exit()
  264. {
  265. counter = 0;
  266. timer1.Interval = 600;
  267. timer1.Enabled = true;
  268. this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
  269. }
  270. private void timer1_Tick(object sender, System.EventArgs e)
  271. {
  272. if (counter >= 10)
  273. {
  274. timer1.Enabled = false;
  275. counter = 0;
  276. Application.Exit();
  277. }
  278. else
  279. {
  280. counter = counter + 1;
  281. }
  282. }
  283. private void exitToolStripMenuItem_Click(object sender, EventArgs e)
  284. {
  285. if (proc_UserServer != null || proc_GridServer != null || proc_AssetServer != null || proc_OpenSim != null)
  286. {
  287. label6.Text = "Stopping server(s) and waiting to safely close..............";
  288. Stop();
  289. Exit();
  290. }
  291. else
  292. {
  293. Application.Exit();
  294. }
  295. }
  296. /// <summary>
  297. /// CLIENT SECTION
  298. /// </summary>
  299. string exeString;
  300. string exeArgs;
  301. string usrsvr;
  302. string error = "Reconsider your commandline choices, you have opposing values selected!";
  303. private void label6_Click(object sender, EventArgs e)
  304. {
  305. label6.Text = clientBox1.Text;
  306. }
  307. private void errorSwitches()
  308. {
  309. MessageBox.Show(error);
  310. label6.Text = error;
  311. }
  312. bool exists;
  313. private void Launch1_Click(object sender, EventArgs e)
  314. {
  315. if (exists = System.IO.File.Exists(clientBox1.Text + exeBox1.Text))
  316. {
  317. executeClient();
  318. }
  319. else
  320. {
  321. MessageBox.Show("FILE DOES NOT EXIST!!!");
  322. label6.Text = "FILE DOES NOT EXIST!!!";
  323. }
  324. }
  325. private void NATfix()
  326. {
  327. }
  328. private void executeClient()
  329. {
  330. label6.Text = "";
  331. exeArgs = "";
  332. exeString = clientBox1.Text;
  333. exeString = exeString += exeBox1.Text;
  334. if (multiple1.Checked == true && noMultiple1.Checked == true) errorSwitches();
  335. else if (korean1.Checked == true && spanish1.Checked == true) errorSwitches();
  336. else
  337. {
  338. if (noProbe1.Checked == true) exeArgs = exeArgs += " -noprobe";
  339. if (multiple1.Checked == true) exeArgs = exeArgs += " -multiple";
  340. if (noMultiple1.Checked == true) exeArgs = exeArgs += " -nomultiple";
  341. if (korean1.Checked == true) exeArgs = exeArgs += " -korean";
  342. if (spanish1.Checked == true) exeArgs = exeArgs += " -spanish";
  343. if (ignorepixeldepth1.Checked == true) exeArgs = exeArgs += " -ignorepixeldepth";
  344. if (nothread1.Checked == true) exeArgs = exeArgs += " -nothread";
  345. if (safe1.Checked == true) exeArgs = exeArgs += " -safe";
  346. if (noconsole1.Checked == true) exeArgs = exeArgs += " -noconsole";
  347. if (log1.Checked == true) exeArgs = exeArgs += " -log";
  348. if (helperuri1.Checked == true) exeArgs = exeArgs += " -helperuri";
  349. if (autologin1.Checked == true) exeArgs = exeArgs += " --autologin";
  350. if (dialog1.Checked == true) exeArgs = exeArgs += " -dialog";
  351. if (previous1.Checked == true) exeArgs = exeArgs += " -previous";
  352. if (simple1.Checked == true) exeArgs = exeArgs += " -simple";
  353. if (noinvlib1.Checked == true) exeArgs = exeArgs += " -noinvlib";
  354. if (noutc1.Checked == true) exeArgs = exeArgs += " -noutc";
  355. if (debugst1.Checked == true) exeArgs = exeArgs += " -debugst";
  356. if (local1.Checked == true) exeArgs = exeArgs += " -local";
  357. if (purge1.Checked == true) exeArgs = exeArgs += " -purge";
  358. if (nofmod1.Checked == true) exeArgs = exeArgs += " -nofmod";
  359. if (nosound1.Checked == true) exeArgs = exeArgs += " -nosound";
  360. if (noaudio1.Checked == true) exeArgs = exeArgs += " -noaudio";
  361. if (url1.Checked == true)
  362. {
  363. exeArgs = exeArgs += " -url ";
  364. exeArgs = exeArgs += simBox1.Text;
  365. }
  366. if (port1.Checked == true)
  367. {
  368. int aPort;
  369. aPort = Convert.ToInt32(portBox1.Text);
  370. if (aPort > 13050)
  371. {
  372. portBox1.Text = "13050";
  373. MessageBox.Show("Enter Usable port number, defaulting to 13050.");
  374. }
  375. if(aPort < 13000)
  376. {
  377. portBox1.Text = "13000";
  378. MessageBox.Show("Enter Usable port number, defaulting to 13000.");
  379. }
  380. else
  381. {
  382. }
  383. exeArgs = exeArgs += " -port ";
  384. exeArgs = exeArgs += portBox1.Text;
  385. }
  386. if (drop1.Checked == true)
  387. {
  388. int aPct;
  389. aPct = Convert.ToInt32(dropBox1.Text);
  390. if (aPct > 100)
  391. {
  392. dropBox1.Text = "100";
  393. MessageBox.Show("Enter Usable port number, defaulting to 100.");
  394. }
  395. if (aPct < 0)
  396. {
  397. dropBox1.Text = "0";
  398. MessageBox.Show("Enter Usable port number, defaulting to 0.");
  399. }
  400. else
  401. {
  402. }
  403. exeArgs = exeArgs += " -drop ";
  404. exeArgs = exeArgs += dropBox1.Text;
  405. }
  406. if (inbw1.Checked == true)
  407. {
  408. exeArgs = exeArgs += " -inbw ";
  409. exeArgs = exeArgs += inbwBox1.Text;
  410. }
  411. if (outbw1.Checked == true)
  412. {
  413. exeArgs = exeArgs += " -outbw ";
  414. exeArgs = exeArgs += outbwBox1.Text;
  415. }
  416. if (settings1.Checked == true)
  417. {
  418. exeArgs = exeArgs += " -settings ";
  419. exeArgs = exeArgs += settingsBox1.Text;
  420. }
  421. if (logfile1.Checked == true)
  422. {
  423. exeArgs = exeArgs += " -logfile ";
  424. exeArgs = exeArgs += logfileBox1.Text;
  425. }
  426. if (yield1.Checked == true)
  427. {
  428. exeArgs = exeArgs += " -yield ";
  429. exeArgs = exeArgs += yieldBox1.Text;
  430. }
  431. if (techTag1.Checked == true)
  432. {
  433. exeArgs = exeArgs += " -techtag ";
  434. exeArgs = exeArgs += techtagBox1.Text;
  435. }
  436. if (quitAfter1.Checked == true)
  437. {
  438. exeArgs = exeArgs += " -quitafter ";
  439. exeArgs = exeArgs += quitafterBox1.Text;
  440. }
  441. if (loginuri1.Checked == true)
  442. {
  443. exeArgs = exeArgs += " -loginuri ";
  444. exeArgs = exeArgs += loginuriBox1.Text;
  445. }
  446. if (set1.Checked == true)
  447. {
  448. exeArgs = exeArgs += " -set ";
  449. exeArgs = exeArgs += setBox1.Text;
  450. }
  451. if (errmask1.Checked == true)
  452. {
  453. exeArgs = exeArgs += " -errmask ";
  454. exeArgs = exeArgs += errmaskBox1.Text;
  455. }
  456. if (raw1.Checked == true)
  457. {
  458. exeArgs = exeArgs += " " + rawBox1.Text;
  459. }
  460. if (skin1.Checked == true)
  461. {
  462. bool exists;
  463. if (exists = System.IO.File.Exists(skinBox1.Text + "skin.xml"))
  464. {
  465. exeArgs = exeArgs += " -skin ";
  466. exeArgs = exeArgs += skinBox1.Text + "skin.xml";
  467. }
  468. else
  469. {
  470. MessageBox.Show("SKIN FILE DOES NOT EXIST AT SPECIFIED LOCATION!!!");
  471. skin1.Checked = false;
  472. executeClient();
  473. }
  474. }
  475. if (user1.Checked == true)
  476. {
  477. //find actual login urls
  478. if (comboBox1.Text == "agni") { usrsvr = " -user " + "--agni"; }
  479. if (comboBox1.Text == "colo") { usrsvr = " -user " + "--colo"; }
  480. if (comboBox1.Text == "dmz") { usrsvr = " -user " + "--dmz"; }
  481. if (comboBox1.Text == "durga") { usrsvr = " -user " + "--Durga"; }
  482. if (comboBox1.Text == "siva") { usrsvr = " -user " + "--siva"; }
  483. exeArgs = exeArgs += usrsvr;
  484. }
  485. if (login1.Checked == true)
  486. {
  487. exeArgs = exeArgs += " -login ";
  488. exeArgs = exeArgs += firstBox1.Text + " " + lastBox1.Text + " " + passBox1.Text;
  489. }
  490. label6.Text = exeString + exeArgs;
  491. System.Diagnostics.Process proc = new System.Diagnostics.Process();
  492. proc.StartInfo.FileName = exeString;
  493. proc.StartInfo.Arguments = exeArgs;
  494. proc.StartInfo.UseShellExecute = false;
  495. proc.StartInfo.RedirectStandardOutput = false;
  496. proc.StartInfo.WorkingDirectory = clientBox1.Text;
  497. proc.Start();
  498. }
  499. }
  500. }
  501. }