109 lines
3.6 KiB
C#
109 lines
3.6 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.ComponentModel;
|
||
using System.Drawing;
|
||
using System.Data;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Windows.Forms;
|
||
using System.IO;
|
||
using System.Diagnostics;
|
||
using System.Threading.Tasks;
|
||
using System.Reflection;
|
||
|
||
namespace AnxSampleBrowser
|
||
{
|
||
public partial class SampleDataHalfVisual : UserControl
|
||
{
|
||
private SampleData _source;
|
||
private AnxSampleBrowser _parent;
|
||
private StringBuilder _processOutput;
|
||
|
||
public SampleDataHalfVisual(SampleData source, AnxSampleBrowser parent)
|
||
{
|
||
|
||
InitializeComponent();
|
||
|
||
|
||
//until error is gone
|
||
// _pImage.Visible = false;
|
||
|
||
_rDescription.ReadOnly = true;
|
||
_parent = parent;
|
||
_source = source;
|
||
|
||
this._lName.Text = _source.Name;
|
||
this._rDescription.Text = _source.Description;
|
||
if (source.ImagePath.Length > 0)
|
||
{
|
||
Bitmap b = new Bitmap(source.ImagePath);
|
||
_pImage.BackgroundImage = b;
|
||
|
||
}
|
||
|
||
_bOpen.Enabled = File.Exists(Path.GetFullPath(Path.Combine(_parent.SamplePath, _source.ProjectPath)));
|
||
_bLaunch.Enabled = File.Exists(Path.GetFullPath(Path.Combine(_parent.SamplePath, _source.ExecPath)));
|
||
}
|
||
|
||
public SampleData SampleData
|
||
{
|
||
get { return _source; }
|
||
}
|
||
|
||
private void _bLaunch_Click(object sender, EventArgs e)
|
||
{
|
||
LaunchExternal();
|
||
}
|
||
|
||
private void _bOpen_Click(object sender, EventArgs e)
|
||
{
|
||
Process.Start(Path.GetFullPath(_parent.SamplePath + _source.ProjectPath));
|
||
}
|
||
|
||
private void LaunchExternal()
|
||
{
|
||
IntPtr handle = this.FindForm().Handle;
|
||
|
||
_processOutput = new StringBuilder();
|
||
try
|
||
{
|
||
Process process = new Process();
|
||
ProcessStartInfo startInfo = new ProcessStartInfo(Path.GetFullPath(_parent.SamplePath + _source.ExecPath));
|
||
startInfo.WorkingDirectory = Path.GetDirectoryName(Path.GetFullPath(_parent.SamplePath + _source.ExecPath));
|
||
startInfo.ErrorDialog = true;
|
||
startInfo.ErrorDialogParentHandle = handle;
|
||
startInfo.RedirectStandardError = true;
|
||
startInfo.UseShellExecute = false;
|
||
|
||
process.StartInfo = startInfo;
|
||
|
||
process.EnableRaisingEvents = true;
|
||
process.Exited += process_Exited;
|
||
|
||
process.ErrorDataReceived += process_ErrorDataReceived;
|
||
|
||
process.Start();
|
||
|
||
process.BeginErrorReadLine();
|
||
}
|
||
catch (Win32Exception ex)
|
||
{
|
||
MessageBox.Show("Can´t find the specified file at " + _parent.SamplePath + _source.ExecPath + '\n' + '\n' + '\n' + ex.Message, "Sample file not found");
|
||
}
|
||
}
|
||
|
||
void process_ErrorDataReceived(object sender, DataReceivedEventArgs e)
|
||
{
|
||
//Samples only output error data.
|
||
_processOutput.Append(e.Data);
|
||
}
|
||
|
||
void process_Exited(object sender, EventArgs e)
|
||
{
|
||
Process process = (Process)sender;
|
||
if (process.ExitCode != 0)
|
||
MessageBox.Show("Process " + Path.GetFileNameWithoutExtension(process.StartInfo.FileName) + " exited with code " + process.ExitCode + " and message: " + _processOutput.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
}
|
||
}
|
||
}
|