v2.1.0.0
- Added an uninstall feature - Made the install form more readable
This commit is contained in:
parent
93713a0f6a
commit
4e0eaba531
4 changed files with 130 additions and 70 deletions
|
@ -5,7 +5,7 @@
|
|||
<UseWindowsForms>true</UseWindowsForms>
|
||||
<ApplicationIcon>Resources\ini.ico</ApplicationIcon>
|
||||
<IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
|
||||
<Version>2.0.5.0</Version>
|
||||
<Version>2.1.0.0</Version>
|
||||
<PackageIcon>Resources\ini.ico</PackageIcon>
|
||||
<PackageIconUrl />
|
||||
<Description>Automatically generates and installs CreamAPI files for Steam games on the user's computer. It can also generate and install CreamAPI for the Paradox Launcher should the user select a Paradox Interactive game.</Description>
|
||||
|
|
|
@ -13,8 +13,9 @@ namespace CreamInstaller
|
|||
public partial class InstallForm : Form
|
||||
{
|
||||
public bool Reselecting = false;
|
||||
public bool Uninstalling = false;
|
||||
|
||||
public InstallForm(IWin32Window owner)
|
||||
public InstallForm(IWin32Window owner, bool uninstall = false)
|
||||
{
|
||||
Owner = owner as Form;
|
||||
InitializeComponent();
|
||||
|
@ -22,6 +23,7 @@ namespace CreamInstaller
|
|||
Text = Program.ApplicationName;
|
||||
Icon = Properties.Resources.Icon;
|
||||
logTextBox.BackColor = InstallationLog.Background;
|
||||
Uninstalling = uninstall;
|
||||
}
|
||||
|
||||
private int OperationsCount;
|
||||
|
@ -58,72 +60,102 @@ namespace CreamInstaller
|
|||
int cur = 0;
|
||||
foreach (string directory in selection.SteamApiDllDirectories)
|
||||
{
|
||||
UpdateUser("Installing CreamAPI for " + selection.Name + $" in directory \"{directory}\" . . . ", InstallationLog.Operation);
|
||||
UpdateUser($"{(Uninstalling ? "Uninstalling" : "Installing")} CreamAPI for " + selection.Name + $" in directory \"{directory}\" . . . ", InstallationLog.Operation);
|
||||
if (!Program.IsProgramRunningDialog(this, selection))
|
||||
{
|
||||
throw new OperationCanceledException();
|
||||
}
|
||||
|
||||
string api = directory + @"\steam_api.dll";
|
||||
string api_o = directory + @"\steam_api_o.dll";
|
||||
if (File.Exists(api) && !File.Exists(api_o))
|
||||
{
|
||||
File.Move(api, api_o);
|
||||
UpdateUser($"Renamed file: {api} -> steam_api_o.dll", InstallationLog.Resource);
|
||||
}
|
||||
if (File.Exists(api_o))
|
||||
{
|
||||
Properties.Resources.API.Write(api);
|
||||
UpdateUser($"Wrote resource to file: {api}", InstallationLog.Resource);
|
||||
}
|
||||
string api64 = directory + @"\steam_api64.dll";
|
||||
string api64_o = directory + @"\steam_api64_o.dll";
|
||||
if (File.Exists(api64) && !File.Exists(api64_o))
|
||||
{
|
||||
File.Move(api64, api64_o);
|
||||
UpdateUser($"Renamed file: {api64} -> steam_api64_o.dll", InstallationLog.Resource);
|
||||
}
|
||||
if (File.Exists(api64_o))
|
||||
{
|
||||
Properties.Resources.API64.Write(api64);
|
||||
UpdateUser($"Wrote resource to file: {api64}", InstallationLog.Resource);
|
||||
}
|
||||
UpdateUser("Generating CreamAPI for " + selection.Name + $" in directory \"{directory}\" . . . ", InstallationLog.Operation);
|
||||
string cApi = directory + @"\cream_api.ini";
|
||||
File.Create(cApi).Close();
|
||||
StreamWriter writer = new(cApi, true, Encoding.UTF8);
|
||||
writer.WriteLine("; " + Application.CompanyName + " v" + Application.ProductVersion);
|
||||
if (selection.SteamAppId > 0)
|
||||
if (Uninstalling)
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteLine($"; {selection.Name}");
|
||||
writer.WriteLine("[steam]");
|
||||
writer.WriteLine($"appid = {selection.SteamAppId}");
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("[dlc]");
|
||||
UpdateUser($"Added game to cream_api.ini with appid {selection.SteamAppId} ({selection.Name})", InstallationLog.Resource);
|
||||
foreach (KeyValuePair<int, string> dlcApp in selection.SelectedSteamDlc)
|
||||
if (File.Exists(api_o))
|
||||
{
|
||||
writer.WriteLine($"{dlcApp.Key} = {dlcApp.Value}");
|
||||
UpdateUser($"Added DLC to cream_api.ini with appid {dlcApp.Key} ({dlcApp.Value})", InstallationLog.Resource);
|
||||
if (File.Exists(api))
|
||||
{
|
||||
File.Delete(api);
|
||||
UpdateUser($"Deleted file: {Path.GetFileName(api)}", InstallationLog.Resource);
|
||||
}
|
||||
File.Move(api_o, api);
|
||||
UpdateUser($"Renamed file: {Path.GetFileName(api_o)} -> {Path.GetFileName(api)}", InstallationLog.Resource);
|
||||
}
|
||||
if (File.Exists(api64_o))
|
||||
{
|
||||
if (File.Exists(api64))
|
||||
{
|
||||
File.Delete(api64);
|
||||
UpdateUser($"Deleted file: {Path.GetFileName(api64)}", InstallationLog.Resource);
|
||||
}
|
||||
File.Move(api64_o, api64);
|
||||
UpdateUser($"Renamed file: {Path.GetFileName(api64_o)} -> {Path.GetFileName(api64)}", InstallationLog.Resource);
|
||||
}
|
||||
if (File.Exists(cApi))
|
||||
{
|
||||
File.Delete(cApi);
|
||||
UpdateUser($"Deleted file: {Path.GetFileName(cApi)}", InstallationLog.Resource);
|
||||
}
|
||||
}
|
||||
foreach (Tuple<int, string, SortedList<int, string>> extraAppDlc in selection.ExtraSteamAppIdDlc)
|
||||
else
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("[steam]");
|
||||
writer.WriteLine($"appid = {extraAppDlc.Item1}");
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("[dlc]");
|
||||
UpdateUser($"Added game to cream_api.ini with appid {extraAppDlc.Item1} ({extraAppDlc.Item2})", InstallationLog.Resource);
|
||||
foreach (KeyValuePair<int, string> dlcApp in extraAppDlc.Item3)
|
||||
if (File.Exists(api) && !File.Exists(api_o))
|
||||
{
|
||||
writer.WriteLine($"{dlcApp.Key} = {dlcApp.Value}");
|
||||
UpdateUser($"Added DLC to cream_api.ini with appid {dlcApp.Key} ({dlcApp.Value})", InstallationLog.Resource);
|
||||
File.Move(api, api_o);
|
||||
UpdateUser($"Renamed file: {Path.GetFileName(api)} -> {Path.GetFileName(api_o)}", InstallationLog.Resource);
|
||||
}
|
||||
if (File.Exists(api_o))
|
||||
{
|
||||
Properties.Resources.API.Write(api);
|
||||
UpdateUser($"Wrote resource to file: {Path.GetFileName(api)}", InstallationLog.Resource);
|
||||
}
|
||||
if (File.Exists(api64) && !File.Exists(api64_o))
|
||||
{
|
||||
File.Move(api64, api64_o);
|
||||
UpdateUser($"Renamed file: {Path.GetFileName(api64)} -> {Path.GetFileName(api64_o)}", InstallationLog.Resource);
|
||||
}
|
||||
if (File.Exists(api64_o))
|
||||
{
|
||||
Properties.Resources.API64.Write(api64);
|
||||
UpdateUser($"Wrote resource to file: {Path.GetFileName(api64)}", InstallationLog.Resource);
|
||||
}
|
||||
UpdateUser("Generating CreamAPI for " + selection.Name + $" in directory \"{directory}\" . . . ", InstallationLog.Operation);
|
||||
File.Create(cApi).Close();
|
||||
StreamWriter writer = new(cApi, true, Encoding.UTF8);
|
||||
writer.WriteLine("; " + Application.CompanyName + " v" + Application.ProductVersion);
|
||||
if (selection.SteamAppId > 0)
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteLine($"; {selection.Name}");
|
||||
writer.WriteLine("[steam]");
|
||||
writer.WriteLine($"appid = {selection.SteamAppId}");
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("[dlc]");
|
||||
UpdateUser($"Added game to cream_api.ini with appid {selection.SteamAppId} ({selection.Name})", InstallationLog.Resource);
|
||||
foreach (KeyValuePair<int, string> dlcApp in selection.SelectedSteamDlc)
|
||||
{
|
||||
writer.WriteLine($"{dlcApp.Key} = {dlcApp.Value}");
|
||||
UpdateUser($"Added DLC to cream_api.ini with appid {dlcApp.Key} ({dlcApp.Value})", InstallationLog.Resource);
|
||||
}
|
||||
}
|
||||
foreach (Tuple<int, string, SortedList<int, string>> extraAppDlc in selection.ExtraSteamAppIdDlc)
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("[steam]");
|
||||
writer.WriteLine($"appid = {extraAppDlc.Item1}");
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("[dlc]");
|
||||
UpdateUser($"Added game to cream_api.ini with appid {extraAppDlc.Item1} ({extraAppDlc.Item2})", InstallationLog.Resource);
|
||||
foreach (KeyValuePair<int, string> dlcApp in extraAppDlc.Item3)
|
||||
{
|
||||
writer.WriteLine($"{dlcApp.Key} = {dlcApp.Value}");
|
||||
UpdateUser($"Added DLC to cream_api.ini with appid {dlcApp.Key} ({dlcApp.Value})", InstallationLog.Resource);
|
||||
}
|
||||
}
|
||||
writer.Flush();
|
||||
writer.Close();
|
||||
}
|
||||
writer.Flush();
|
||||
writer.Close();
|
||||
await Task.Run(() => Thread.Sleep(10)); // to keep the text box control from glitching
|
||||
UpdateProgress(++cur / count * 100);
|
||||
}
|
||||
|
|
43
CreamInstaller/Forms/SelectForm.Designer.cs
generated
43
CreamInstaller/Forms/SelectForm.Designer.cs
generated
|
@ -31,7 +31,7 @@ namespace CreamInstaller
|
|||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.acceptButton = new System.Windows.Forms.Button();
|
||||
this.installButton = new System.Windows.Forms.Button();
|
||||
this.cancelButton = new System.Windows.Forms.Button();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
|
@ -45,22 +45,23 @@ namespace CreamInstaller
|
|||
this.scanButton = new System.Windows.Forms.Button();
|
||||
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
|
||||
this.flowLayoutPanel2 = new System.Windows.Forms.FlowLayoutPanel();
|
||||
this.uninstallButton = new System.Windows.Forms.Button();
|
||||
this.groupBox1.SuspendLayout();
|
||||
this.flowLayoutPanel1.SuspendLayout();
|
||||
this.flowLayoutPanel2.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// acceptButton
|
||||
// installButton
|
||||
//
|
||||
this.acceptButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.acceptButton.Enabled = false;
|
||||
this.acceptButton.Location = new System.Drawing.Point(422, 326);
|
||||
this.acceptButton.Name = "acceptButton";
|
||||
this.acceptButton.Size = new System.Drawing.Size(150, 23);
|
||||
this.acceptButton.TabIndex = 10002;
|
||||
this.acceptButton.Text = "Generate and Install";
|
||||
this.acceptButton.UseVisualStyleBackColor = true;
|
||||
this.acceptButton.Click += new System.EventHandler(this.OnAccept);
|
||||
this.installButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.installButton.Enabled = false;
|
||||
this.installButton.Location = new System.Drawing.Point(422, 326);
|
||||
this.installButton.Name = "installButton";
|
||||
this.installButton.Size = new System.Drawing.Size(150, 23);
|
||||
this.installButton.TabIndex = 10003;
|
||||
this.installButton.Text = "Generate and Install";
|
||||
this.installButton.UseVisualStyleBackColor = true;
|
||||
this.installButton.Click += new System.EventHandler(this.OnInstall);
|
||||
//
|
||||
// cancelButton
|
||||
//
|
||||
|
@ -189,7 +190,7 @@ namespace CreamInstaller
|
|||
//
|
||||
this.scanButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.scanButton.Enabled = false;
|
||||
this.scanButton.Location = new System.Drawing.Point(236, 326);
|
||||
this.scanButton.Location = new System.Drawing.Point(155, 326);
|
||||
this.scanButton.Name = "scanButton";
|
||||
this.scanButton.Size = new System.Drawing.Size(180, 23);
|
||||
this.scanButton.TabIndex = 10001;
|
||||
|
@ -220,11 +221,24 @@ namespace CreamInstaller
|
|||
this.flowLayoutPanel2.Size = new System.Drawing.Size(43, 25);
|
||||
this.flowLayoutPanel2.TabIndex = 1006;
|
||||
//
|
||||
// uninstallButton
|
||||
//
|
||||
this.uninstallButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.uninstallButton.Enabled = false;
|
||||
this.uninstallButton.Location = new System.Drawing.Point(341, 326);
|
||||
this.uninstallButton.Name = "uninstallButton";
|
||||
this.uninstallButton.Size = new System.Drawing.Size(75, 23);
|
||||
this.uninstallButton.TabIndex = 10002;
|
||||
this.uninstallButton.Text = "Uninstall";
|
||||
this.uninstallButton.UseVisualStyleBackColor = true;
|
||||
this.uninstallButton.Click += new System.EventHandler(this.OnUninstall);
|
||||
//
|
||||
// SelectForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(584, 361);
|
||||
this.Controls.Add(this.uninstallButton);
|
||||
this.Controls.Add(this.flowLayoutPanel1);
|
||||
this.Controls.Add(this.scanButton);
|
||||
this.Controls.Add(this.flowLayoutPanel2);
|
||||
|
@ -232,7 +246,7 @@ namespace CreamInstaller
|
|||
this.Controls.Add(this.progressBar1);
|
||||
this.Controls.Add(this.label1);
|
||||
this.Controls.Add(this.cancelButton);
|
||||
this.Controls.Add(this.acceptButton);
|
||||
this.Controls.Add(this.installButton);
|
||||
this.Controls.Add(this.label2);
|
||||
this.DoubleBuffered = true;
|
||||
this.MaximizeBox = false;
|
||||
|
@ -256,7 +270,7 @@ namespace CreamInstaller
|
|||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Button acceptButton;
|
||||
private System.Windows.Forms.Button installButton;
|
||||
private System.Windows.Forms.Button cancelButton;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.GroupBox groupBox1;
|
||||
|
@ -270,6 +284,7 @@ namespace CreamInstaller
|
|||
private Button blockProtectedHelpButton;
|
||||
private FlowLayoutPanel flowLayoutPanel1;
|
||||
private FlowLayoutPanel flowLayoutPanel2;
|
||||
private Button uninstallButton;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -412,7 +412,8 @@ namespace CreamInstaller
|
|||
scanButton.Enabled = false;
|
||||
noneFoundLabel.Visible = false;
|
||||
allCheckBox.Enabled = false;
|
||||
acceptButton.Enabled = false;
|
||||
installButton.Enabled = false;
|
||||
uninstallButton.Enabled = installButton.Enabled;
|
||||
selectionTreeView.Enabled = false;
|
||||
|
||||
label2.Visible = true;
|
||||
|
@ -503,7 +504,8 @@ namespace CreamInstaller
|
|||
allCheckBox.Enabled = selectionTreeView.Enabled;
|
||||
noneFoundLabel.Visible = !selectionTreeView.Enabled;
|
||||
|
||||
acceptButton.Enabled = ProgramSelection.AllSafeEnabled.Any();
|
||||
installButton.Enabled = ProgramSelection.AllSafeEnabled.Any();
|
||||
uninstallButton.Enabled = installButton.Enabled;
|
||||
cancelButton.Enabled = false;
|
||||
scanButton.Enabled = true;
|
||||
|
||||
|
@ -575,7 +577,8 @@ namespace CreamInstaller
|
|||
allCheckBox.Checked = treeNodes.TrueForAll(treeNode => treeNode.Checked);
|
||||
allCheckBox.CheckedChanged += OnAllCheckBoxChanged;
|
||||
}
|
||||
acceptButton.Enabled = ProgramSelection.AllSafeEnabled.Any();
|
||||
installButton.Enabled = ProgramSelection.AllSafeEnabled.Any();
|
||||
uninstallButton.Enabled = installButton.Enabled;
|
||||
}
|
||||
|
||||
private class TreeNodeSorter : IComparer
|
||||
|
@ -686,7 +689,7 @@ namespace CreamInstaller
|
|||
return false;
|
||||
}
|
||||
|
||||
private void OnAccept(object sender, EventArgs e)
|
||||
private void OnAccept(bool uninstall = false)
|
||||
{
|
||||
if (ProgramSelection.All.Count > 0)
|
||||
{
|
||||
|
@ -704,7 +707,7 @@ namespace CreamInstaller
|
|||
}
|
||||
|
||||
Hide();
|
||||
InstallForm installForm = new(this);
|
||||
InstallForm installForm = new(this, uninstall);
|
||||
installForm.ShowDialog();
|
||||
if (installForm.Reselecting)
|
||||
{
|
||||
|
@ -719,6 +722,16 @@ namespace CreamInstaller
|
|||
}
|
||||
}
|
||||
|
||||
private void OnInstall(object sender, EventArgs e)
|
||||
{
|
||||
OnAccept(false);
|
||||
}
|
||||
|
||||
private void OnUninstall(object sender, EventArgs e)
|
||||
{
|
||||
OnAccept(true);
|
||||
}
|
||||
|
||||
private void OnScan(object sender, EventArgs e)
|
||||
{
|
||||
OnLoad();
|
||||
|
|
Loading…
Reference in a new issue