private void buttonCreatePackage_Click(object sender, EventArgs e)
{
var directory = Path.GetDirectoryName(currentPackage.FileName);
try
{
if (directory == null)
{
throw new DirectoryNotFoundException();
}
if (!Directory.Exists(directory))
{
throw new DirectoryNotFoundException(directory);
}
if (!Program.CurrentlyRunningOnMono)
{
//Mono doesn't support System.Security.AccessControl, so this doesn't work....
Directory.GetAccessControl(directory);
}
using (FileStream fs = File.OpenWrite(currentPackage.FileName))
{
//Just attempt to open the file with to write as a test
}
}
catch (Exception ex)
{
if (ex is DirectoryNotFoundException)
{
//We didn't find the directory
//In theory this shouldn't happen, but handle it just in case
if (ex.Message == string.Empty)
{
//Our filename is blank
MessageBox.Show(Interface.GetInterfaceString("packages_filename_empty"), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Hand);
}
else
{
//Directory doesn't exist
MessageBox.Show(Interface.GetInterfaceString("packages_directory_missing") + ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Hand);
}
}
else if (ex is UnauthorizedAccessException)
{
//No permissions from access control
MessageBox.Show(Interface.GetInterfaceString("packages_directory_nowrite") + directory, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Hand);
}
else
{
//Generic error
MessageBox.Show(Interface.GetInterfaceString("packages_file_generic") + currentPackage.FileName, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Hand);
}
return;
}
HidePanels();
panelPleaseWait.Show();
ProblemEncountered = false;
workerThread.DoWork += delegate
{
Manipulation.CreatePackage(currentPackage, Interface.CurrentOptions.packageCompressionType, currentPackage.FileName, ImageFile, filesToPackage);
};
workerThread.RunWorkerCompleted += delegate {
if (ProblemEncountered == false)
{
string text = "";
for (int i = 0; i < filesToPackage.Count; i++)
{
text += filesToPackage[i].relativePath + "\r\n";
}
textBoxFilesInstalled.Text = text;
labelInstallSuccess1.Text = Interface.GetInterfaceString("packages_creation_success");
labelInstallSuccess2.Text = Interface.GetInterfaceString("packages_creation_success_header");
labelListFilesInstalled.Text = Interface.GetInterfaceString("packages_creation_success_files");
buttonInstallFinish.Text = Interface.GetInterfaceString("packages_success");
}
panelPleaseWait.Hide();
panelSuccess.Show();
};
workerThread.RunWorkerAsync();
}