CP-41108: Replaced the separate splash screen executable with a form within the application executable.

Signed-off-by: Konstantina Chremmou <konstantina.chremmou@citrix.com>
This commit is contained in:
Konstantina Chremmou 2022-11-08 11:18:35 +00:00
parent 1102ac80e2
commit 6644ef920a
61 changed files with 956 additions and 1650 deletions

View File

@ -59,11 +59,10 @@
<!-- XenCenter EXE -->
<File Id="XenCenterEXE" Source="$(env.RepoRoot)\XenAdmin\bin\Release\$(var.BrandConsoleNoSpace).exe" KeyPath="yes" />
<!-- other EXEs -->
<File Id="XenCenterMainEXE" Source="$(env.RepoRoot)\XenAdmin\bin\Release\$(var.BrandConsoleNoSpace)Main.exe" />
<File Id="XeEXE" Source="$(env.RepoRoot)\xe\bin\Release\xe.exe" />
<File Id="xva_verifyEXE" Source="$(env.RepoRoot)\xva_verify\bin\Release\xva_verify.exe" />
<!-- config -->
<File Id="XenCenterMainCONFIG" Source="$(env.RepoRoot)\XenAdmin\bin\Release\$(var.BrandConsoleNoSpace)Main.exe.config" />
<File Id="XenCenterCONFIG" Source="$(env.RepoRoot)\XenAdmin\bin\Release\$(var.BrandConsoleNoSpace).exe.config" />
<!-- DLLs -->
<File Id="CommandLibDLL" Source="$(env.RepoRoot)\XenAdmin\bin\Release\CommandLib.dll" />
<File Id="CookComputingDLL" Source="$(env.RepoRoot)\XenAdmin\bin\Release\CookComputing.XmlRpcV2.dll" />
@ -126,7 +125,7 @@
</Component>
<Directory Id="ja" Name="ja">
<Component Id="JaResources" Guid="$(var.JapaneseResxGuid)">
<File Id="JaResourcesDLL" Source="$(env.RepoRoot)\XenAdmin\bin\Release\ja\$(var.BrandConsoleNoSpace)Main.resources.dll" />
<File Id="JaResourcesDLL" Source="$(env.RepoRoot)\XenAdmin\bin\Release\ja\$(var.BrandConsoleNoSpace).resources.dll" />
<File Id="JaXenModResourcesDLL" Source="$(env.RepoRoot)\XenAdmin\bin\Release\ja\XenModel.resources.dll" />
<File Id="JaMicRepVwrCmnResDLL" Source="$(env.RepoRoot)\XenAdmin\ReportViewer\Microsoft.ReportViewer.Common.resources.dll" />
<File Id="JaMicRepVwrPrcObjResDLL" Source="$(env.RepoRoot)\XenAdmin\ReportViewer\Microsoft.ReportViewer.WinForms.resources.dll" />
@ -135,7 +134,7 @@
</Directory>
<Directory Id="sc" Name="zh-CN">
<Component Id="ScResources" Guid="$(var.SimplifiedChineseResxGuid)">
<File Id="ScResourcesDLL" Source="$(env.RepoRoot)\XenAdmin\bin\Release\zh-CN\$(var.BrandConsoleNoSpace)Main.resources.dll" />
<File Id="ScResourcesDLL" Source="$(env.RepoRoot)\XenAdmin\bin\Release\zh-CN\$(var.BrandConsoleNoSpace).resources.dll" />
<File Id="ScXenModResourcesDLL" Source="$(env.RepoRoot)\XenAdmin\bin\Release\zh-CN\XenModel.resources.dll" />
<File Id="ScMicRepVwrCmnResDLL" Source="$(env.RepoRoot)\XenAdmin\ReportViewer\Microsoft.ReportViewer.Common.resources.dll" />
<File Id="ScMicRepVwrPrcObjResDLL" Source="$(env.RepoRoot)\XenAdmin\ReportViewer\Microsoft.ReportViewer.WinForms.resources.dll" />

View File

@ -12,8 +12,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommandLib", "CommandLib\Co
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "xva_verify", "xva_verify\xva_verify.csproj", "{2A70D7E7-EAB2-4C36-B3F4-85B79D2384B5}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "splash", "splash\splash.vcxproj", "{AFB19C9D-DD63-478B-A4A3-8452CBD0B9AB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XenAdminTests", "XenAdminTests\XenAdminTests.csproj", "{21B9482C-D255-40D5-ABA7-C8F00F99547C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XenCenterLib", "XenCenterLib\XenCenterLib.csproj", "{9861DFA1-B41F-432D-A43F-226257DEBBB9}"
@ -74,15 +72,6 @@ Global
{2A70D7E7-EAB2-4C36-B3F4-85B79D2384B5}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{2A70D7E7-EAB2-4C36-B3F4-85B79D2384B5}.Release|Win32.ActiveCfg = Release|Any CPU
{2A70D7E7-EAB2-4C36-B3F4-85B79D2384B5}.Release|Win32.Build.0 = Release|Any CPU
{AFB19C9D-DD63-478B-A4A3-8452CBD0B9AB}.Debug|Any CPU.ActiveCfg = Debug|Win32
{AFB19C9D-DD63-478B-A4A3-8452CBD0B9AB}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{AFB19C9D-DD63-478B-A4A3-8452CBD0B9AB}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{AFB19C9D-DD63-478B-A4A3-8452CBD0B9AB}.Debug|Win32.ActiveCfg = Debug|Win32
{AFB19C9D-DD63-478B-A4A3-8452CBD0B9AB}.Release|Any CPU.ActiveCfg = Release|Win32
{AFB19C9D-DD63-478B-A4A3-8452CBD0B9AB}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{AFB19C9D-DD63-478B-A4A3-8452CBD0B9AB}.Release|Mixed Platforms.Build.0 = Release|Win32
{AFB19C9D-DD63-478B-A4A3-8452CBD0B9AB}.Release|Win32.ActiveCfg = Release|Win32
{AFB19C9D-DD63-478B-A4A3-8452CBD0B9AB}.Release|Win32.Build.0 = Release|Win32
{21B9482C-D255-40D5-ABA7-C8F00F99547C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{21B9482C-D255-40D5-ABA7-C8F00F99547C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{21B9482C-D255-40D5-ABA7-C8F00F99547C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU

View File

@ -487,6 +487,6 @@
<value>ActionProgressDialog</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.XenDialogBase, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.XenDialogBase, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -487,6 +487,6 @@
<value>ActionProgressDialog</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.XenDialogBase, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.XenDialogBase, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -487,6 +487,6 @@
<value>ActionProgressDialog</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.XenDialogBase, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.XenDialogBase, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -619,7 +619,7 @@
<value>dropDownButtonShow</value>
</data>
<data name="&gt;&gt;dropDownButtonShow.Type" xml:space="preserve">
<value>XenAdmin.Controls.DropDownButton, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.DropDownButton, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;dropDownButtonShow.Parent" xml:space="preserve">
<value>tableLayoutPanel2</value>
@ -730,7 +730,7 @@
<value>searchTextBox</value>
</data>
<data name="&gt;&gt;searchTextBox.Type" xml:space="preserve">
<value>XenAdmin.Controls.SearchTextBox, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.SearchTextBox, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;searchTextBox.Parent" xml:space="preserve">
<value>tableLayoutPanel2</value>
@ -811,6 +811,6 @@
<value>GraphDetailsDialog</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.XenDialogBase, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.XenDialogBase, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -619,7 +619,7 @@
<value>dropDownButtonShow</value>
</data>
<data name="&gt;&gt;dropDownButtonShow.Type" xml:space="preserve">
<value>XenAdmin.Controls.DropDownButton, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.DropDownButton, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;dropDownButtonShow.Parent" xml:space="preserve">
<value>tableLayoutPanel2</value>
@ -730,7 +730,7 @@
<value>searchTextBox</value>
</data>
<data name="&gt;&gt;searchTextBox.Type" xml:space="preserve">
<value>XenAdmin.Controls.SearchTextBox, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.SearchTextBox, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;searchTextBox.Parent" xml:space="preserve">
<value>tableLayoutPanel2</value>
@ -811,6 +811,6 @@
<value>GraphDetailsDialog</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.XenDialogBase, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.XenDialogBase, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -619,7 +619,7 @@
<value>dropDownButtonShow</value>
</data>
<data name="&gt;&gt;dropDownButtonShow.Type" xml:space="preserve">
<value>XenAdmin.Controls.DropDownButton, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.DropDownButton, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;dropDownButtonShow.Parent" xml:space="preserve">
<value>tableLayoutPanel2</value>
@ -730,7 +730,7 @@
<value>searchTextBox</value>
</data>
<data name="&gt;&gt;searchTextBox.Type" xml:space="preserve">
<value>XenAdmin.Controls.SearchTextBox, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.SearchTextBox, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;searchTextBox.Parent" xml:space="preserve">
<value>tableLayoutPanel2</value>
@ -811,6 +811,6 @@
<value>GraphDetailsDialog</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.XenDialogBase, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.XenDialogBase, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -151,7 +151,7 @@
<value>externalToolsOptionsPage1</value>
</data>
<data name="&gt;&gt;externalToolsOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.ConnectionOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.ConnectionOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;externalToolsOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -181,7 +181,7 @@
<value>confirmationOptionsPage1</value>
</data>
<data name="&gt;&gt;confirmationOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.ConfirmationOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.ConfirmationOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;confirmationOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -211,7 +211,7 @@
<value>pluginOptionsPage1</value>
</data>
<data name="&gt;&gt;pluginOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.PluginOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.PluginOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pluginOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -244,7 +244,7 @@
<value>saveAndRestoreOptionsPage1</value>
</data>
<data name="&gt;&gt;saveAndRestoreOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.SaveAndRestoreOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.SaveAndRestoreOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;saveAndRestoreOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -274,7 +274,7 @@
<value>securityOptionsPage1</value>
</data>
<data name="&gt;&gt;securityOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.SecurityOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.SecurityOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;securityOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -304,7 +304,7 @@
<value>updatesOptionsPage1</value>
</data>
<data name="&gt;&gt;updatesOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.UpdatesOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.UpdatesOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;updatesOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -334,7 +334,7 @@
<value>graphsOptionsPage1</value>
</data>
<data name="&gt;&gt;graphsOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.DisplayOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.DisplayOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;graphsOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -367,7 +367,7 @@
<value>consolesOptionsPage1</value>
</data>
<data name="&gt;&gt;consolesOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.ConsolesOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.ConsolesOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;consolesOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -400,7 +400,7 @@
<value>connectionOptionsPage1</value>
</data>
<data name="&gt;&gt;connectionOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.ConnectionOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.ConnectionOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;connectionOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -439,7 +439,7 @@
<value>verticalTabs</value>
</data>
<data name="&gt;&gt;verticalTabs.Type" xml:space="preserve">
<value>XenAdmin.Controls.VerticalTabs, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.VerticalTabs, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;verticalTabs.Parent" xml:space="preserve">
<value>splitContainer.Panel1</value>
@ -556,6 +556,6 @@
<value>OptionsDialog</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.VerticallyTabbedDialog, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.VerticallyTabbedDialog, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -151,7 +151,7 @@
<value>externalToolsOptionsPage1</value>
</data>
<data name="&gt;&gt;externalToolsOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.ConnectionOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.ConnectionOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;externalToolsOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -181,7 +181,7 @@
<value>confirmationOptionsPage1</value>
</data>
<data name="&gt;&gt;confirmationOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.ConfirmationOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.ConfirmationOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;confirmationOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -211,7 +211,7 @@
<value>pluginOptionsPage1</value>
</data>
<data name="&gt;&gt;pluginOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.PluginOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.PluginOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pluginOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -244,7 +244,7 @@
<value>saveAndRestoreOptionsPage1</value>
</data>
<data name="&gt;&gt;saveAndRestoreOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.SaveAndRestoreOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.SaveAndRestoreOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;saveAndRestoreOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -274,7 +274,7 @@
<value>securityOptionsPage1</value>
</data>
<data name="&gt;&gt;securityOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.SecurityOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.SecurityOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;securityOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -304,7 +304,7 @@
<value>updatesOptionsPage1</value>
</data>
<data name="&gt;&gt;updatesOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.UpdatesOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.UpdatesOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;updatesOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -334,7 +334,7 @@
<value>graphsOptionsPage1</value>
</data>
<data name="&gt;&gt;graphsOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.DisplayOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.DisplayOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;graphsOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -367,7 +367,7 @@
<value>consolesOptionsPage1</value>
</data>
<data name="&gt;&gt;consolesOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.ConsolesOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.ConsolesOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;consolesOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -400,7 +400,7 @@
<value>connectionOptionsPage1</value>
</data>
<data name="&gt;&gt;connectionOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.ConnectionOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.ConnectionOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;connectionOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -439,7 +439,7 @@
<value>verticalTabs</value>
</data>
<data name="&gt;&gt;verticalTabs.Type" xml:space="preserve">
<value>XenAdmin.Controls.VerticalTabs, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.VerticalTabs, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;verticalTabs.Parent" xml:space="preserve">
<value>splitContainer.Panel1</value>
@ -556,6 +556,6 @@
<value>OptionsDialog</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.VerticallyTabbedDialog, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.VerticallyTabbedDialog, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -151,7 +151,7 @@
<value>externalToolsOptionsPage1</value>
</data>
<data name="&gt;&gt;externalToolsOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.ConnectionOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.ConnectionOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;externalToolsOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -181,7 +181,7 @@
<value>confirmationOptionsPage1</value>
</data>
<data name="&gt;&gt;confirmationOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.ConfirmationOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.ConfirmationOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;confirmationOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -211,7 +211,7 @@
<value>pluginOptionsPage1</value>
</data>
<data name="&gt;&gt;pluginOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.PluginOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.PluginOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pluginOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -244,7 +244,7 @@
<value>saveAndRestoreOptionsPage1</value>
</data>
<data name="&gt;&gt;saveAndRestoreOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.SaveAndRestoreOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.SaveAndRestoreOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;saveAndRestoreOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -274,7 +274,7 @@
<value>securityOptionsPage1</value>
</data>
<data name="&gt;&gt;securityOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.SecurityOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.SecurityOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;securityOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -304,7 +304,7 @@
<value>updatesOptionsPage1</value>
</data>
<data name="&gt;&gt;updatesOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.UpdatesOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.UpdatesOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;updatesOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -334,7 +334,7 @@
<value>graphsOptionsPage1</value>
</data>
<data name="&gt;&gt;graphsOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.DisplayOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.DisplayOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;graphsOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -367,7 +367,7 @@
<value>consolesOptionsPage1</value>
</data>
<data name="&gt;&gt;consolesOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.ConsolesOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.ConsolesOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;consolesOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -400,7 +400,7 @@
<value>connectionOptionsPage1</value>
</data>
<data name="&gt;&gt;connectionOptionsPage1.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.OptionsPages.ConnectionOptionsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.OptionsPages.ConnectionOptionsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;connectionOptionsPage1.Parent" xml:space="preserve">
<value>ContentPanel</value>
@ -439,7 +439,7 @@
<value>verticalTabs</value>
</data>
<data name="&gt;&gt;verticalTabs.Type" xml:space="preserve">
<value>XenAdmin.Controls.VerticalTabs, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.VerticalTabs, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;verticalTabs.Parent" xml:space="preserve">
<value>splitContainer.Panel1</value>
@ -556,6 +556,6 @@
<value>OptionsDialog</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.VerticallyTabbedDialog, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.VerticallyTabbedDialog, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -229,7 +229,7 @@
<value>updateLogOptionsDecentGroupBox</value>
</data>
<data name="&gt;&gt;updateLogOptionsDecentGroupBox.Type" xml:space="preserve">
<value>XenAdmin.Controls.DecentGroupBox, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.DecentGroupBox, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;updateLogOptionsDecentGroupBox.Parent" xml:space="preserve">
<value>tableLayoutPanel3</value>
@ -280,7 +280,7 @@
<value>label5</value>
</data>
<data name="&gt;&gt;label5.Type" xml:space="preserve">
<value>XenAdmin.Controls.Common.AutoHeightLabel, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.Common.AutoHeightLabel, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;label5.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
@ -481,7 +481,7 @@
<value>GraphTypeGroupBox</value>
</data>
<data name="&gt;&gt;GraphTypeGroupBox.Type" xml:space="preserve">
<value>XenAdmin.Controls.DecentGroupBox, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.DecentGroupBox, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;GraphTypeGroupBox.Parent" xml:space="preserve">
<value>tableLayoutPanel3</value>
@ -589,7 +589,7 @@
<value>TabGroupBox</value>
</data>
<data name="&gt;&gt;TabGroupBox.Type" xml:space="preserve">
<value>XenAdmin.Controls.DecentGroupBox, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.DecentGroupBox, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;TabGroupBox.Parent" xml:space="preserve">
<value>tableLayoutPanel3</value>

View File

@ -404,7 +404,7 @@
<value>sshConsoleGroupBox</value>
</data>
<data name="&gt;&gt;sshConsoleGroupBox.Type" xml:space="preserve">
<value>XenAdmin.Controls.DecentGroupBox, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.DecentGroupBox, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;sshConsoleGroupBox.Parent" xml:space="preserve">
<value>externalToolsLayoutPanel</value>

View File

@ -338,7 +338,7 @@
<value>dataGridViewActions</value>
</data>
<data name="&gt;&gt;dataGridViewActions.Type" xml:space="preserve">
<value>XenAdmin.Controls.DataGridViewEx.DataGridViewEx, [XenCenter_No_Space]Main, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.DataGridViewEx.DataGridViewEx, [XenCenter_No_Space], Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;dataGridViewActions.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
@ -491,6 +491,6 @@
<value>CloseXenCenterWarningDialog</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Dialogs.XenDialogBase, [XenCenter_No_Space]Main, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Dialogs.XenDialogBase, [XenCenter_No_Space], Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -889,6 +889,7 @@ namespace XenAdmin
public static Bitmap SpinningFrame5 = Properties.Resources.SpinningFrame5;
public static Bitmap SpinningFrame6 = Properties.Resources.SpinningFrame6;
public static Bitmap SpinningFrame7 = Properties.Resources.SpinningFrame7;
public static Bitmap splash = Properties.Resources.splash;
public static Bitmap StoppedDC_16 = Properties.Resources.StoppedDC_16;
public static Bitmap subscribe = Properties.Resources.subscribe;
public static Bitmap suse_16x = Properties.Resources.suse_16x;

View File

@ -61,7 +61,6 @@ using XenCenterLib;
using System.Linq;
using XenAdmin.Controls.GradientPanel;
using XenAdmin.Help;
using System.IO;
namespace XenAdmin
{
@ -79,7 +78,7 @@ namespace XenAdmin
/// <summary>
/// The selected tab for the overview node.
/// </summary>
private TabPage selectedOverviewTab = null;
private TabPage selectedOverviewTab;
internal readonly PerformancePage PerformancePage = new PerformancePage();
internal readonly GeneralTabPage GeneralPage = new GeneralTabPage();
@ -105,22 +104,22 @@ namespace XenAdmin
internal readonly DockerDetailsPage DockerDetailsPage = new DockerDetailsPage();
internal readonly UsbPage UsbPage = new UsbPage();
private ActionBase statusBarAction = null;
private ActionBase statusBarAction;
private bool IgnoreTabChanges = false;
private bool IgnoreTabChanges;
/// <summary>
/// Helper boolean to only trigger Resize_End when window is really resized by dragging edges
/// Without this Resize_End is triggered even when window is moved around and not resized
/// </summary>
private bool mainWindowResized = false;
private bool mainWindowResized;
private readonly Dictionary<IXenConnection, IList<Form>> activePoolWizards = new Dictionary<IXenConnection, IList<Form>>();
/// <summary>
/// The arguments passed in on the command line.
/// </summary>
private string[] CommandLineParam = null;
private string[] CommandLineParam;
private ArgType CommandLineArgType = ArgType.None;
private static readonly System.Windows.Forms.Timer CheckForUpdatesTimer = new System.Windows.Forms.Timer();
@ -144,9 +143,10 @@ namespace XenAdmin
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
static extern uint RegisterApplicationRestart(string pszCommandline, uint dwFlags);
public event Action CloseSplashRequested;
public MainWindow(ArgType argType, string[] args)
{
Program.MainWindow = this;
licenseManagerLauncher = new LicenseManagerLauncher(Program.MainWindow);
HealthCheckOverviewLauncher = new HealthCheckOverviewLauncher(Program.MainWindow);
InvokeHelper.Initialize(this);
@ -565,6 +565,16 @@ namespace XenAdmin
statusLabel.Text = Helpers.FirstLine(message);
}
public void CloseSplashScreen()
{
ThreadPool.QueueUserWorkItem(delegate
{
// Sleep a short time before closing the splash
Thread.Sleep(500);
Program.Invoke(Program.MainWindow, () => CloseSplashRequested?.Invoke());
});
}
private void MainWindow_Shown(object sender, EventArgs e)
{
MainMenuBar.Location = new Point(0, 0);
@ -598,12 +608,7 @@ namespace XenAdmin
}
}
ThreadPool.QueueUserWorkItem(delegate
{
// Sleep a short time before closing the splash
Thread.Sleep(500);
Program.Invoke(Program.MainWindow, Program.CloseSplash);
});
CloseSplashScreen();
if (!Program.RunInAutomatedTestMode && !Helpers.CommonCriteriaCertificationRelease)
{

View File

@ -145,7 +145,7 @@
<value>navigationPane</value>
</data>
<data name="&gt;&gt;navigationPane.Type" xml:space="preserve">
<value>XenAdmin.Controls.MainWindowControls.NavigationPane, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.MainWindowControls.NavigationPane, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;navigationPane.Parent" xml:space="preserve">
<value>splitContainer1.Panel1</value>
@ -577,7 +577,7 @@
<value>snapshotPage</value>
</data>
<data name="&gt;&gt;snapshotPage.Type" xml:space="preserve">
<value>XenAdmin.TabPages.SnapshotsPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.TabPages.SnapshotsPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;snapshotPage.Parent" xml:space="preserve">
<value>TabPageSnapshots</value>
@ -928,7 +928,7 @@
<value>alertPage</value>
</data>
<data name="&gt;&gt;alertPage.Type" xml:space="preserve">
<value>XenAdmin.TabPages.AlertSummaryPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.TabPages.AlertSummaryPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;alertPage.Parent" xml:space="preserve">
<value>splitContainer1.Panel2</value>
@ -958,7 +958,7 @@
<value>eventsPage</value>
</data>
<data name="&gt;&gt;eventsPage.Type" xml:space="preserve">
<value>XenAdmin.TabPages.HistoryPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.TabPages.HistoryPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;eventsPage.Parent" xml:space="preserve">
<value>splitContainer1.Panel2</value>
@ -1102,7 +1102,7 @@
<value>loggedInLabel1</value>
</data>
<data name="&gt;&gt;loggedInLabel1.Type" xml:space="preserve">
<value>XenAdmin.Controls.LoggedInLabel, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.LoggedInLabel, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;loggedInLabel1.Parent" xml:space="preserve">
<value>toolTipContainer1</value>
@ -1129,7 +1129,7 @@
<value>toolTipContainer1</value>
</data>
<data name="&gt;&gt;toolTipContainer1.Type" xml:space="preserve">
<value>XenAdmin.Controls.ToolTipContainer, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.ToolTipContainer, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolTipContainer1.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
@ -1177,7 +1177,7 @@
<value>TitleBackPanel</value>
</data>
<data name="&gt;&gt;TitleBackPanel.Type" xml:space="preserve">
<value>XenAdmin.Controls.GradientPanel.VerticalGradientPanel, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.GradientPanel.VerticalGradientPanel, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;TitleBackPanel.Parent" xml:space="preserve">
<value>splitContainer1.Panel2</value>
@ -1777,7 +1777,7 @@
<value>ToolStrip</value>
</data>
<data name="&gt;&gt;ToolStrip.Type" xml:space="preserve">
<value>XenAdmin.Controls.ToolStripEx, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.ToolStripEx, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;ToolStrip.Parent" xml:space="preserve">
<value>$this</value>
@ -2794,7 +2794,7 @@
<value>MainMenuBar</value>
</data>
<data name="&gt;&gt;MainMenuBar.Type" xml:space="preserve">
<value>XenAdmin.Controls.MenuStripEx, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.MenuStripEx, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;MainMenuBar.Parent" xml:space="preserve">
<value>MenuPanel</value>
@ -2935,7 +2935,7 @@
<value>AddServerToolbarButton</value>
</data>
<data name="&gt;&gt;AddServerToolbarButton.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator11.Name" xml:space="preserve">
<value>toolStripSeparator11</value>
@ -2947,19 +2947,19 @@
<value>AddPoolToolbarButton</value>
</data>
<data name="&gt;&gt;AddPoolToolbarButton.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;newStorageToolbarButton.Name" xml:space="preserve">
<value>newStorageToolbarButton</value>
</data>
<data name="&gt;&gt;newStorageToolbarButton.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;NewVmToolbarButton.Name" xml:space="preserve">
<value>NewVmToolbarButton</value>
</data>
<data name="&gt;&gt;NewVmToolbarButton.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator12.Name" xml:space="preserve">
<value>toolStripSeparator12</value>
@ -2971,79 +2971,79 @@
<value>shutDownToolStripButton</value>
</data>
<data name="&gt;&gt;shutDownToolStripButton.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;powerOnHostToolStripButton.Name" xml:space="preserve">
<value>powerOnHostToolStripButton</value>
</data>
<data name="&gt;&gt;powerOnHostToolStripButton.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;startVMToolStripButton.Name" xml:space="preserve">
<value>startVMToolStripButton</value>
</data>
<data name="&gt;&gt;startVMToolStripButton.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;RebootToolbarButton.Name" xml:space="preserve">
<value>RebootToolbarButton</value>
</data>
<data name="&gt;&gt;RebootToolbarButton.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;resumeToolStripButton.Name" xml:space="preserve">
<value>resumeToolStripButton</value>
</data>
<data name="&gt;&gt;resumeToolStripButton.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;SuspendToolbarButton.Name" xml:space="preserve">
<value>SuspendToolbarButton</value>
</data>
<data name="&gt;&gt;SuspendToolbarButton.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;ForceShutdownToolbarButton.Name" xml:space="preserve">
<value>ForceShutdownToolbarButton</value>
</data>
<data name="&gt;&gt;ForceShutdownToolbarButton.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;ForceRebootToolbarButton.Name" xml:space="preserve">
<value>ForceRebootToolbarButton</value>
</data>
<data name="&gt;&gt;ForceRebootToolbarButton.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;stopContainerToolStripButton.Name" xml:space="preserve">
<value>stopContainerToolStripButton</value>
</data>
<data name="&gt;&gt;stopContainerToolStripButton.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;startContainerToolStripButton.Name" xml:space="preserve">
<value>startContainerToolStripButton</value>
</data>
<data name="&gt;&gt;startContainerToolStripButton.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;restartContainerToolStripButton.Name" xml:space="preserve">
<value>restartContainerToolStripButton</value>
</data>
<data name="&gt;&gt;restartContainerToolStripButton.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;resumeContainerToolStripButton.Name" xml:space="preserve">
<value>resumeContainerToolStripButton</value>
</data>
<data name="&gt;&gt;resumeContainerToolStripButton.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pauseContainerToolStripButton.Name" xml:space="preserve">
<value>pauseContainerToolStripButton</value>
</data>
<data name="&gt;&gt;pauseContainerToolStripButton.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripButton, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;statusToolTip.Name" xml:space="preserve">
<value>statusToolTip</value>
@ -3067,13 +3067,13 @@
<value>FileImportVMToolStripMenuItem</value>
</data>
<data name="&gt;&gt;FileImportVMToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;importSearchToolStripMenuItem.Name" xml:space="preserve">
<value>importSearchToolStripMenuItem</value>
</data>
<data name="&gt;&gt;importSearchToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator21.Name" xml:space="preserve">
<value>toolStripSeparator21</value>
@ -3169,7 +3169,7 @@
<value>AddPoolToolStripMenuItem</value>
</data>
<data name="&gt;&gt;AddPoolToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator8.Name" xml:space="preserve">
<value>toolStripSeparator8</value>
@ -3181,25 +3181,25 @@
<value>addServerToolStripMenuItem</value>
</data>
<data name="&gt;&gt;addServerToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.AddHostToSelectedPoolToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.AddHostToSelectedPoolToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;removeServerToolStripMenuItem.Name" xml:space="preserve">
<value>removeServerToolStripMenuItem</value>
</data>
<data name="&gt;&gt;removeServerToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.PoolRemoveServerToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.PoolRemoveServerToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;poolReconnectAsToolStripMenuItem.Name" xml:space="preserve">
<value>poolReconnectAsToolStripMenuItem</value>
</data>
<data name="&gt;&gt;poolReconnectAsToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;disconnectPoolToolStripMenuItem.Name" xml:space="preserve">
<value>disconnectPoolToolStripMenuItem</value>
</data>
<data name="&gt;&gt;disconnectPoolToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator27.Name" xml:space="preserve">
<value>toolStripSeparator27</value>
@ -3211,7 +3211,7 @@
<value>virtualAppliancesToolStripMenuItem</value>
</data>
<data name="&gt;&gt;virtualAppliancesToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator30.Name" xml:space="preserve">
<value>toolStripSeparator30</value>
@ -3223,73 +3223,73 @@
<value>highAvailabilityToolStripMenuItem</value>
</data>
<data name="&gt;&gt;highAvailabilityToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripMenuItemHaConfigure.Name" xml:space="preserve">
<value>toolStripMenuItemHaConfigure</value>
</data>
<data name="&gt;&gt;toolStripMenuItemHaConfigure.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripMenuItemHaDisable.Name" xml:space="preserve">
<value>toolStripMenuItemHaDisable</value>
</data>
<data name="&gt;&gt;toolStripMenuItemHaDisable.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;disasterRecoveryToolStripMenuItem.Name" xml:space="preserve">
<value>disasterRecoveryToolStripMenuItem</value>
</data>
<data name="&gt;&gt;disasterRecoveryToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;drConfigureToolStripMenuItem.Name" xml:space="preserve">
<value>drConfigureToolStripMenuItem</value>
</data>
<data name="&gt;&gt;drConfigureToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;DrWizardToolStripMenuItem.Name" xml:space="preserve">
<value>DrWizardToolStripMenuItem</value>
</data>
<data name="&gt;&gt;DrWizardToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;VMSnapshotScheduleToolStripMenuItem.Name" xml:space="preserve">
<value>VMSnapshotScheduleToolStripMenuItem</value>
</data>
<data name="&gt;&gt;VMSnapshotScheduleToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;exportResourceReportPoolToolStripMenuItem.Name" xml:space="preserve">
<value>exportResourceReportPoolToolStripMenuItem</value>
</data>
<data name="&gt;&gt;exportResourceReportPoolToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripMenuItemWlb.Name" xml:space="preserve">
<value>toolStripMenuItemWlb</value>
</data>
<data name="&gt;&gt;toolStripMenuItemWlb.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;wlbReportsToolStripMenuItem.Name" xml:space="preserve">
<value>wlbReportsToolStripMenuItem</value>
</data>
<data name="&gt;&gt;wlbReportsToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;wlbDisconnectToolStripMenuItem.Name" xml:space="preserve">
<value>wlbDisconnectToolStripMenuItem</value>
</data>
<data name="&gt;&gt;wlbDisconnectToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;conversionToolStripMenuItem.Name" xml:space="preserve">
<value>conversionToolStripMenuItem</value>
</data>
<data name="&gt;&gt;conversionToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator9.Name" xml:space="preserve">
<value>toolStripSeparator9</value>
@ -3301,19 +3301,19 @@
<value>changePoolPasswordToolStripMenuItem</value>
</data>
<data name="&gt;&gt;changePoolPasswordToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripMenuItemRotateSecret.Name" xml:space="preserve">
<value>toolStripMenuItemRotateSecret</value>
</data>
<data name="&gt;&gt;toolStripMenuItemRotateSecret.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripMenuItemEnableTls.Name" xml:space="preserve">
<value>toolStripMenuItemEnableTls</value>
</data>
<data name="&gt;&gt;toolStripMenuItemEnableTls.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripMenuItem1.Name" xml:space="preserve">
<value>toolStripMenuItem1</value>
@ -3325,7 +3325,7 @@
<value>deleteToolStripMenuItem</value>
</data>
<data name="&gt;&gt;deleteToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator26.Name" xml:space="preserve">
<value>toolStripSeparator26</value>
@ -3343,7 +3343,7 @@
<value>PoolPropertiesToolStripMenuItem</value>
</data>
<data name="&gt;&gt;PoolPropertiesToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;HostMenuItem.Name" xml:space="preserve">
<value>HostMenuItem</value>
@ -3355,7 +3355,7 @@
<value>AddHostToolStripMenuItem</value>
</data>
<data name="&gt;&gt;AddHostToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripMenuItem11.Name" xml:space="preserve">
<value>toolStripMenuItem11</value>
@ -3367,25 +3367,25 @@
<value>RebootHostToolStripMenuItem</value>
</data>
<data name="&gt;&gt;RebootHostToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;powerOnToolStripMenuItem.Name" xml:space="preserve">
<value>powerOnToolStripMenuItem</value>
</data>
<data name="&gt;&gt;powerOnToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;ShutdownHostToolStripMenuItem.Name" xml:space="preserve">
<value>ShutdownHostToolStripMenuItem</value>
</data>
<data name="&gt;&gt;ShutdownHostToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;restartToolstackToolStripMenuItem.Name" xml:space="preserve">
<value>restartToolstackToolStripMenuItem</value>
</data>
<data name="&gt;&gt;restartToolstackToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator1.Name" xml:space="preserve">
<value>toolStripSeparator1</value>
@ -3403,19 +3403,19 @@
<value>ReconnectToolStripMenuItem1</value>
</data>
<data name="&gt;&gt;ReconnectToolStripMenuItem1.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;DisconnectToolStripMenuItem.Name" xml:space="preserve">
<value>DisconnectToolStripMenuItem</value>
</data>
<data name="&gt;&gt;DisconnectToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;reconnectAsToolStripMenuItem.Name" xml:space="preserve">
<value>reconnectAsToolStripMenuItem</value>
</data>
<data name="&gt;&gt;reconnectAsToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator4.Name" xml:space="preserve">
<value>toolStripSeparator4</value>
@ -3427,25 +3427,25 @@
<value>connectAllToolStripMenuItem</value>
</data>
<data name="&gt;&gt;connectAllToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;disconnectAllToolStripMenuItem.Name" xml:space="preserve">
<value>disconnectAllToolStripMenuItem</value>
</data>
<data name="&gt;&gt;disconnectAllToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;addServerToPoolMenuItem.Name" xml:space="preserve">
<value>addServerToPoolMenuItem</value>
</data>
<data name="&gt;&gt;addServerToPoolMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.AddSelectedHostToPoolToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.AddSelectedHostToPoolToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;menuItemRemoveFromPool.Name" xml:space="preserve">
<value>menuItemRemoveFromPool</value>
</data>
<data name="&gt;&gt;menuItemRemoveFromPool.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator3.Name" xml:space="preserve">
<value>toolStripSeparator3</value>
@ -3457,13 +3457,13 @@
<value>backupToolStripMenuItem</value>
</data>
<data name="&gt;&gt;backupToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;restoreFromBackupToolStripMenuItem.Name" xml:space="preserve">
<value>restoreFromBackupToolStripMenuItem</value>
</data>
<data name="&gt;&gt;restoreFromBackupToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator23.Name" xml:space="preserve">
<value>toolStripSeparator23</value>
@ -3475,55 +3475,55 @@
<value>toolStripMenuItemCertificate</value>
</data>
<data name="&gt;&gt;toolStripMenuItemCertificate.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripMenuItemInstallCertificate.Name" xml:space="preserve">
<value>toolStripMenuItemInstallCertificate</value>
</data>
<data name="&gt;&gt;toolStripMenuItemInstallCertificate.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripMenuItemResetCertificate.Name" xml:space="preserve">
<value>toolStripMenuItemResetCertificate</value>
</data>
<data name="&gt;&gt;toolStripMenuItemResetCertificate.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;maintenanceModeToolStripMenuItem1.Name" xml:space="preserve">
<value>maintenanceModeToolStripMenuItem1</value>
</data>
<data name="&gt;&gt;maintenanceModeToolStripMenuItem1.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;controlDomainMemoryToolStripMenuItem.Name" xml:space="preserve">
<value>controlDomainMemoryToolStripMenuItem</value>
</data>
<data name="&gt;&gt;controlDomainMemoryToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;RemoveCrashdumpsToolStripMenuItem.Name" xml:space="preserve">
<value>RemoveCrashdumpsToolStripMenuItem</value>
</data>
<data name="&gt;&gt;RemoveCrashdumpsToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;HostPasswordToolStripMenuItem.Name" xml:space="preserve">
<value>HostPasswordToolStripMenuItem</value>
</data>
<data name="&gt;&gt;HostPasswordToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;ChangeRootPasswordToolStripMenuItem.Name" xml:space="preserve">
<value>ChangeRootPasswordToolStripMenuItem</value>
</data>
<data name="&gt;&gt;ChangeRootPasswordToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;forgetSavedPasswordToolStripMenuItem.Name" xml:space="preserve">
<value>forgetSavedPasswordToolStripMenuItem</value>
</data>
<data name="&gt;&gt;forgetSavedPasswordToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator25.Name" xml:space="preserve">
<value>toolStripSeparator25</value>
@ -3535,13 +3535,13 @@
<value>destroyServerToolStripMenuItem</value>
</data>
<data name="&gt;&gt;destroyServerToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;removeHostToolStripMenuItem.Name" xml:space="preserve">
<value>removeHostToolStripMenuItem</value>
</data>
<data name="&gt;&gt;removeHostToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator15.Name" xml:space="preserve">
<value>toolStripSeparator15</value>
@ -3559,7 +3559,7 @@
<value>ServerPropertiesToolStripMenuItem</value>
</data>
<data name="&gt;&gt;ServerPropertiesToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;VMToolStripMenuItem.Name" xml:space="preserve">
<value>VMToolStripMenuItem</value>
@ -3571,31 +3571,31 @@
<value>NewVmToolStripMenuItem</value>
</data>
<data name="&gt;&gt;NewVmToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;startShutdownToolStripMenuItem.Name" xml:space="preserve">
<value>startShutdownToolStripMenuItem</value>
</data>
<data name="&gt;&gt;startShutdownToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.VMLifeCycleToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.VMLifeCycleToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;resumeOnToolStripMenuItem.Name" xml:space="preserve">
<value>resumeOnToolStripMenuItem</value>
</data>
<data name="&gt;&gt;resumeOnToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.ResumeVMOnHostToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.ResumeVMOnHostToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;relocateToolStripMenuItem.Name" xml:space="preserve">
<value>relocateToolStripMenuItem</value>
</data>
<data name="&gt;&gt;relocateToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.MigrateVMToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.MigrateVMToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;startOnHostToolStripMenuItem.Name" xml:space="preserve">
<value>startOnHostToolStripMenuItem</value>
</data>
<data name="&gt;&gt;startOnHostToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.StartVMOnHostToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.StartVMOnHostToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator20.Name" xml:space="preserve">
<value>toolStripSeparator20</value>
@ -3607,13 +3607,13 @@
<value>assignSnapshotScheduleToolStripMenuItem</value>
</data>
<data name="&gt;&gt;assignSnapshotScheduleToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.AssignGroupToolStripMenuItemVMSS, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.AssignGroupToolStripMenuItemVMSS, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;assignToVirtualApplianceToolStripMenuItem.Name" xml:space="preserve">
<value>assignToVirtualApplianceToolStripMenuItem</value>
</data>
<data name="&gt;&gt;assignToVirtualApplianceToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.AssignGroupToolStripMenuItemVM_appliance, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.AssignGroupToolStripMenuItemVM_appliance, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripMenuItem9.Name" xml:space="preserve">
<value>toolStripMenuItem9</value>
@ -3625,49 +3625,49 @@
<value>copyVMtoSharedStorageMenuItem</value>
</data>
<data name="&gt;&gt;copyVMtoSharedStorageMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;MoveVMToolStripMenuItem.Name" xml:space="preserve">
<value>MoveVMToolStripMenuItem</value>
</data>
<data name="&gt;&gt;MoveVMToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;snapshotToolStripMenuItem.Name" xml:space="preserve">
<value>snapshotToolStripMenuItem</value>
</data>
<data name="&gt;&gt;snapshotToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;convertToTemplateToolStripMenuItem.Name" xml:space="preserve">
<value>convertToTemplateToolStripMenuItem</value>
</data>
<data name="&gt;&gt;convertToTemplateToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;exportToolStripMenuItem.Name" xml:space="preserve">
<value>exportToolStripMenuItem</value>
</data>
<data name="&gt;&gt;exportToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;disableCbtToolStripMenuItem.Name" xml:space="preserve">
<value>disableCbtToolStripMenuItem</value>
</data>
<data name="&gt;&gt;disableCbtToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;enablePVSReadcachingToolStripMenuItem.Name" xml:space="preserve">
<value>enablePVSReadcachingToolStripMenuItem</value>
</data>
<data name="&gt;&gt;enablePVSReadcachingToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;disablePVSReadcachingToolStripMenuItem.Name" xml:space="preserve">
<value>disablePVSReadcachingToolStripMenuItem</value>
</data>
<data name="&gt;&gt;disablePVSReadcachingToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripMenuItem12.Name" xml:space="preserve">
<value>toolStripMenuItem12</value>
@ -3679,7 +3679,7 @@
<value>installToolsToolStripMenuItem</value>
</data>
<data name="&gt;&gt;installToolsToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;sendCtrlAltDelToolStripMenuItem.Name" xml:space="preserve">
<value>sendCtrlAltDelToolStripMenuItem</value>
@ -3697,7 +3697,7 @@
<value>uninstallToolStripMenuItem</value>
</data>
<data name="&gt;&gt;uninstallToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator10.Name" xml:space="preserve">
<value>toolStripSeparator10</value>
@ -3715,7 +3715,7 @@
<value>VMPropertiesToolStripMenuItem</value>
</data>
<data name="&gt;&gt;VMPropertiesToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripMenuItem8.Name" xml:space="preserve">
<value>toolStripMenuItem8</value>
@ -3733,7 +3733,7 @@
<value>AddStorageToolStripMenuItem</value>
</data>
<data name="&gt;&gt;AddStorageToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator22.Name" xml:space="preserve">
<value>toolStripSeparator22</value>
@ -3745,13 +3745,13 @@
<value>RepairStorageToolStripMenuItem</value>
</data>
<data name="&gt;&gt;RepairStorageToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;DefaultSRToolStripMenuItem.Name" xml:space="preserve">
<value>DefaultSRToolStripMenuItem</value>
</data>
<data name="&gt;&gt;DefaultSRToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator2.Name" xml:space="preserve">
<value>toolStripSeparator2</value>
@ -3763,25 +3763,25 @@
<value>virtualDisksToolStripMenuItem</value>
</data>
<data name="&gt;&gt;virtualDisksToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;addVirtualDiskToolStripMenuItem.Name" xml:space="preserve">
<value>addVirtualDiskToolStripMenuItem</value>
</data>
<data name="&gt;&gt;addVirtualDiskToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;attachVirtualDiskToolStripMenuItem.Name" xml:space="preserve">
<value>attachVirtualDiskToolStripMenuItem</value>
</data>
<data name="&gt;&gt;attachVirtualDiskToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;reclaimFreedSpacetripMenuItem.Name" xml:space="preserve">
<value>reclaimFreedSpacetripMenuItem</value>
</data>
<data name="&gt;&gt;reclaimFreedSpacetripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator19.Name" xml:space="preserve">
<value>toolStripSeparator19</value>
@ -3793,25 +3793,25 @@
<value>DetachStorageToolStripMenuItem</value>
</data>
<data name="&gt;&gt;DetachStorageToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;ReattachStorageRepositoryToolStripMenuItem.Name" xml:space="preserve">
<value>ReattachStorageRepositoryToolStripMenuItem</value>
</data>
<data name="&gt;&gt;ReattachStorageRepositoryToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;ForgetStorageRepositoryToolStripMenuItem.Name" xml:space="preserve">
<value>ForgetStorageRepositoryToolStripMenuItem</value>
</data>
<data name="&gt;&gt;ForgetStorageRepositoryToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;DestroyStorageRepositoryToolStripMenuItem.Name" xml:space="preserve">
<value>DestroyStorageRepositoryToolStripMenuItem</value>
</data>
<data name="&gt;&gt;DestroyStorageRepositoryToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator18.Name" xml:space="preserve">
<value>toolStripSeparator18</value>
@ -3829,7 +3829,7 @@
<value>SRPropertiesToolStripMenuItem</value>
</data>
<data name="&gt;&gt;SRPropertiesToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;templatesToolStripMenuItem.Name" xml:space="preserve">
<value>templatesToolStripMenuItem</value>
@ -3841,19 +3841,19 @@
<value>CreateVmFromTemplateToolStripMenuItem</value>
</data>
<data name="&gt;&gt;CreateVmFromTemplateToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;newVMFromTemplateToolStripMenuItem.Name" xml:space="preserve">
<value>newVMFromTemplateToolStripMenuItem</value>
</data>
<data name="&gt;&gt;newVMFromTemplateToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;InstantVmToolStripMenuItem.Name" xml:space="preserve">
<value>InstantVmToolStripMenuItem</value>
</data>
<data name="&gt;&gt;InstantVmToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator29.Name" xml:space="preserve">
<value>toolStripSeparator29</value>
@ -3865,13 +3865,13 @@
<value>exportTemplateToolStripMenuItem</value>
</data>
<data name="&gt;&gt;exportTemplateToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;duplicateTemplateToolStripMenuItem.Name" xml:space="preserve">
<value>duplicateTemplateToolStripMenuItem</value>
</data>
<data name="&gt;&gt;duplicateTemplateToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator16.Name" xml:space="preserve">
<value>toolStripSeparator16</value>
@ -3883,7 +3883,7 @@
<value>uninstallTemplateToolStripMenuItem</value>
</data>
<data name="&gt;&gt;uninstallTemplateToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator28.Name" xml:space="preserve">
<value>toolStripSeparator28</value>
@ -3901,7 +3901,7 @@
<value>templatePropertiesToolStripMenuItem</value>
</data>
<data name="&gt;&gt;templatePropertiesToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolsToolStripMenuItem.Name" xml:space="preserve">
<value>toolsToolStripMenuItem</value>
@ -3913,13 +3913,13 @@
<value>bugToolToolStripMenuItem</value>
</data>
<data name="&gt;&gt;bugToolToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;healthCheckToolStripMenuItem1.Name" xml:space="preserve">
<value>healthCheckToolStripMenuItem1</value>
</data>
<data name="&gt;&gt;healthCheckToolStripMenuItem1.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator14.Name" xml:space="preserve">
<value>toolStripSeparator14</value>
@ -3943,13 +3943,13 @@
<value>installNewUpdateToolStripMenuItem</value>
</data>
<data name="&gt;&gt;installNewUpdateToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;rollingUpgradeToolStripMenuItem.Name" xml:space="preserve">
<value>rollingUpgradeToolStripMenuItem</value>
</data>
<data name="&gt;&gt;rollingUpgradeToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;toolStripSeparator6.Name" xml:space="preserve">
<value>toolStripSeparator6</value>
@ -4069,7 +4069,7 @@
<value>securityGroupsToolStripMenuItem</value>
</data>
<data name="&gt;&gt;securityGroupsToolStripMenuItem.Type" xml:space="preserve">
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Commands.CommandToolStripMenuItem, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;statusProgressBar.Name" xml:space="preserve">
<value>statusProgressBar</value>

View File

@ -40,6 +40,7 @@ using System.IO;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;
using XenAdmin.Core;
@ -61,8 +62,9 @@ namespace XenAdmin
/// </summary>
public static readonly string XenCenterUUID = Guid.NewGuid().ToString();
private static NamedPipes.Pipe pipe;
private const string PIPE_PATH_PATTERN = @"\\.\pipe\XenCenter-{0}-{1}-{2}";
private static NamedPipes.Pipe _pipe;
private static string _pipePath;
private const string PIPE_PATH_PATTERN = @"\\.\pipe\{0}-{1}";
public static Font DefaultFont = FormFontFixer.DefaultFont;
public static Font DefaultFontBold;
@ -70,8 +72,7 @@ namespace XenAdmin
public static Font DefaultFontItalic;
public static Font DefaultFontHeader;
public static MainWindow MainWindow = null;
public static MainWindow MainWindow { get; private set; }
public static CollectionChangeEventHandler ProgramInvokeHandler(CollectionChangeEventHandler handler)
{
@ -88,7 +89,6 @@ namespace XenAdmin
};
}
/// <summary>
/// The secure hash of the main password used to load the client session.
/// If this is null then no prior session existed and the user should be prompted
@ -104,7 +104,7 @@ namespace XenAdmin
public static bool RunInAutomatedTestMode = false;
public static string TestExceptionString; // an exception passed back to the test framework
private static log4net.ILog log;
private static readonly log4net.ILog log;
public static volatile bool Exiting;
@ -133,6 +133,15 @@ namespace XenAdmin
[STAThread]
public static void Main(string[] args)
{
string appGuid = ((GuidAttribute)Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(GuidAttribute), false).GetValue(0)).Value;
_pipePath = string.Format(PIPE_PATH_PATTERN, BrandManager.BrandConsoleNoSpace, appGuid);
if (NamedPipes.Pipe.ExistsPipe(_pipePath))
{
NamedPipes.Pipe.SendMessageToPipe(_pipePath, string.Join(" ", args));
return;
}
Settings.Load();
// Reset statics, because XenAdminTests likes to call Main() twice.
@ -174,10 +183,7 @@ namespace XenAdmin
LogSystemDetails();
Settings.Log();
// Remove the '--wait' argument, which may have been passed to the splash screen
var sanitizedArgs = args.Where(ar => ar != "--wait").ToArray();
var firstArgType = ParseFileArgs(sanitizedArgs, out string[] tailArgs);
var firstArgType = ParseFileArgs(args, out string[] tailArgs);
if (firstArgType == ArgType.Passwords)
{
@ -194,27 +200,20 @@ namespace XenAdmin
return;
}
try
{
ConnectPipe();
}
catch (Win32Exception exn)
{
log.Error("Creating named pipe failed. Continuing to launch XenCenter.", exn);
}
ConnectPipe();
Application.ApplicationExit -= Application_ApplicationExit;
Application.ApplicationExit += Application_ApplicationExit;
MainWindow mainWindow = new MainWindow(firstArgType, tailArgs);
Application.Run(mainWindow);
MainWindow = new MainWindow(firstArgType, tailArgs);
Application.Run(new SplashScreenContext(MainWindow));
log.Info("Application main thread exited");
}
private static ArgType ParseFileArgs(string[] args, out string[] tailArgs)
{
tailArgs = new string[0];
tailArgs = Array.Empty<string>();
if (args == null || args.Length < 2)
{
@ -259,84 +258,47 @@ namespace XenAdmin
}
/// <summary>
/// Connects to the XenCenter named pipe. If the pipe didn't already exist, a new thread is started
/// that listens for incoming data on the pipe (from new invocations of XenCenter) and deals
/// with the command line arguments of those instances. If the pipe does exist, a Win32Exception is thrown.
/// If the pipe doesn't already exist, it creates a new one and starts a thread
/// that listens for incoming data on the pipe (from new invocations of XenCenter)
/// and deals with the command line arguments of those instances.
/// </summary>
/// <exception cref="Win32Exception">If creating the pipe failed for any reason.</exception>
private static void ConnectPipe()
{
string pipe_path = string.Format(PIPE_PATH_PATTERN, Process.GetCurrentProcess().SessionId, Environment.UserName, Assembly.GetExecutingAssembly().Location.Replace('\\', '-'));
_pipe = new NamedPipes.Pipe(_pipePath);
// Pipe path must be limited to 256 characters in length
if (pipe_path.Length > 256)
if (_pipe != null)
{
pipe_path = pipe_path.Substring(0, 256);
_pipe.Read += pipe_Read;
_pipe.BeginRead();
}
}
log.InfoFormat(@"Connecting to pipe '{0}'", pipe_path);
// Line below may throw Win32Exception
pipe = new NamedPipes.Pipe(pipe_path);
private static void pipe_Read(string message)
{
MainWindow m = MainWindow;
if (m == null || RunInAutomatedTestMode)
return;
log.InfoFormat(@"Successfully created pipe '{0}' - proceeding to launch XenCenter", pipe_path);
var bits = message.Split(' ').ToArray();
pipe.Read += delegate (object sender, NamedPipes.PipeReadEventArgs e)
var firstArgType = ParseFileArgs(bits, out string[] tailArgs);
if (firstArgType == ArgType.None)
return;
Invoke(m, delegate
{
MainWindow m = MainWindow;
if (m == null || RunInAutomatedTestMode)
return;
var bits = e.Message.Split(' ').Where(ar => ar != "--wait").ToArray();
var firstArgType = ParseFileArgs(bits, out string[] tailArgs);
if (firstArgType == ArgType.Passwords)
{
log.ErrorFormat("Refusing to accept passwords request down pipe. Use {0}Main.exe directly", BrandManager.BrandConsole.Replace(" ", ""));
return;
}
if (firstArgType == ArgType.Connect)
{
log.ErrorFormat("Connect not supported down pipe. Use {0}Main.exe directly", BrandManager.BrandConsole.Replace(" ", ""));
return;
}
if (firstArgType == ArgType.None)
return;
// The C++ splash screen passes its command line as a literal string.
// This means we will get an e.Message like
// open "C:\Documents and Settings\foo.xva"
// INCLUDING the double quotes, thus we need to trim them
var argument = tailArgs[0];
if (argument.StartsWith("\""))
{
var count = tailArgs.TakeWhile(t => !t.EndsWith("\"")).Count();
if (count < tailArgs.Length)
count++;
argument = string.Join(" ", tailArgs.Take(count).ToArray());
}
argument = argument.Trim('"');
Invoke(m, delegate
{
m.WindowState = FormWindowState.Normal;
m.ProcessCommand(firstArgType, argument);
});
};
pipe.BeginRead();
// We created the pipe successfully - i.e. nobody was listening, so go ahead and start XenCenter
m.WindowState = FormWindowState.Normal;
m.ProcessCommand(firstArgType, tailArgs);
});
}
internal static void DisconnectPipe()
{
if (pipe != null)
if (_pipe != null)
{
log.Debug("Disconnecting from named pipe in Program.DisconnectPipe()");
ThreadPool.QueueUserWorkItem(state => pipe.Disconnect());
ThreadPool.QueueUserWorkItem(state => _pipe.EndRead());
}
}
@ -803,22 +765,9 @@ namespace XenAdmin
{
return !Exiting && c != null && !c.Disposing && !c.IsDisposed && c.IsHandleCreated;
}
#endregion
private const string SplashWindowClass = "XenCenterSplash0001";
internal static void CloseSplash()
{
IntPtr hWnd = Win32.FindWindow(SplashWindowClass, null);
if (hWnd == IntPtr.Zero)
return;
if (!Win32.PostMessage(hWnd, Win32.WM_DESTROY, IntPtr.Zero, IntPtr.Zero))
{
log.Warn("PostMessage WM_DESTROY failed in CloseSplash()", new Win32Exception());
}
}
public static void OpenURL(string url)
{
if (RunInAutomatedTestMode || string.IsNullOrEmpty(url))
@ -845,6 +794,39 @@ namespace XenAdmin
public static string VersionAndLanguage => $"{Version}.{CurrentLanguage}";
public static CultureInfo CurrentCulture => Thread.CurrentThread.CurrentCulture;
private class SplashScreenContext : ApplicationContext
{
private readonly SplashScreen _splashScreen;
private readonly MainWindow _mainWindow;
public SplashScreenContext(MainWindow mainWindow)
{
_mainWindow = mainWindow;
_mainWindow.CloseSplashRequested += _mainWindow_CloseSplashRequested;
_mainWindow.FormClosed += mainWindow_FormClosed;
_splashScreen = new SplashScreen();
_splashScreen.ShowMainWindowRequested += _splashScreen_ShowMainWindowRequested;
_splashScreen.Show();
}
private void _splashScreen_ShowMainWindowRequested()
{
_mainWindow.Show();
}
private void _mainWindow_CloseSplashRequested()
{
_splashScreen.Close();
}
private void mainWindow_FormClosed(object s, FormClosedEventArgs args)
{
ExitThread();
}
}
}
public enum ArgType { Import, License, Restore, None, XenSearch, Passwords, Connect }

View File

@ -19,7 +19,7 @@ namespace XenAdmin.Properties {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
@ -2169,16 +2169,6 @@ namespace XenAdmin.Properties {
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap rocky_16x {
get {
object obj = ResourceManager.GetObject("rocky_16x", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
@ -2800,6 +2790,16 @@ namespace XenAdmin.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap rocky_16x {
get {
object obj = ResourceManager.GetObject("rocky_16x", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
@ -3050,6 +3050,16 @@ namespace XenAdmin.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap splash {
get {
object obj = ResourceManager.GetObject("splash", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>

View File

@ -1132,4 +1132,7 @@
<data name="RightArrow" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\..\Branding\Images\RightArrow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="splash" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\..\Branding\Images\splash.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View File

@ -169,10 +169,7 @@ namespace XenAdmin
return;
}
// close the splash screen before opening the password dialog (the main window closes the
// splash screen after this method is called, however, this cannot happen because the dialog
// is launched modally blocking the UI thread and is additionally behind the splash screen)
Program.CloseSplash();
Program.MainWindow.CloseSplashScreen();
string password = null;
do

71
XenAdmin/SplashScreen.Designer.cs generated Normal file
View File

@ -0,0 +1,71 @@
namespace XenAdmin
{
partial class SplashScreen
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SplashScreen));
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.timer1 = new System.Windows.Forms.Timer(this.components);
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// pictureBox1
//
resources.ApplyResources(this.pictureBox1, "pictureBox1");
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.TabStop = false;
//
// timer1
//
this.timer1.Interval = 2000;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// SplashScreen
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.ControlBox = false;
this.Controls.Add(this.pictureBox1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Name = "SplashScreen";
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.TopMost = true;
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Timer timer1;
}
}

View File

@ -1,4 +1,4 @@
/* Copyright (c) Citrix Systems, Inc.
/* Copyright (c) Cloud Software Group Holdings, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms,
@ -29,14 +29,31 @@
* SUCH DAMAGE.
*/
#ifndef UTIL_H
#define UTIL_H
using System;
using System.Windows.Forms;
#include <iostream>
#include <sstream>
namespace XenAdmin
{
public partial class SplashScreen : Form
{
public event Action ShowMainWindowRequested;
using namespace std;
public SplashScreen()
{
InitializeComponent();
pictureBox1.Image = Images.StaticImages.splash;
}
void ErrorExit(wostringstream& logStream, const LPTSTR lpszFunction, bool showDialog);
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
timer1.Start();
}
#endif
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Stop();
ShowMainWindowRequested?.Invoke();
}
}
}

View File

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 1.3
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object]
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object]
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

183
XenAdmin/SplashScreen.resx Normal file
View File

@ -0,0 +1,183 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="pictureBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="pictureBox1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 0, 0, 0</value>
</data>
<data name="pictureBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>415, 217</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="pictureBox1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;pictureBox1.Name" xml:space="preserve">
<value>pictureBox1</value>
</data>
<data name="&gt;&gt;pictureBox1.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pictureBox1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;pictureBox1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>96, 96</value>
</data>
<data name="$this.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="$this.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>435, 246</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>SplashScreen</value>
</data>
<data name="&gt;&gt;timer1.Name" xml:space="preserve">
<value>timer1</value>
</data>
<data name="&gt;&gt;timer1.Type" xml:space="preserve">
<value>System.Windows.Forms.Timer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>SplashScreen</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>

View File

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 1.3
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object]
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object]
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -322,7 +322,7 @@
<value>tTipRemoveButton</value>
</data>
<data name="&gt;&gt;tTipRemoveButton.Type" xml:space="preserve">
<value>XenAdmin.Controls.ToolTipContainer, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.ToolTipContainer, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;tTipRemoveButton.Parent" xml:space="preserve">
<value>flowLayoutPanel1</value>
@ -379,7 +379,7 @@
<value>tTipLogoutButton</value>
</data>
<data name="&gt;&gt;tTipLogoutButton.Type" xml:space="preserve">
<value>XenAdmin.Controls.ToolTipContainer, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.ToolTipContainer, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;tTipLogoutButton.Parent" xml:space="preserve">
<value>flowLayoutPanel1</value>
@ -436,7 +436,7 @@
<value>tTipChangeRole</value>
</data>
<data name="&gt;&gt;tTipChangeRole.Type" xml:space="preserve">
<value>XenAdmin.Controls.ToolTipContainer, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.ToolTipContainer, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;tTipChangeRole.Parent" xml:space="preserve">
<value>flowLayoutPanel1</value>
@ -826,6 +826,6 @@
<value>AdPage</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.TabPages.BaseTabPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.TabPages.BaseTabPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -322,7 +322,7 @@
<value>tTipRemoveButton</value>
</data>
<data name="&gt;&gt;tTipRemoveButton.Type" xml:space="preserve">
<value>XenAdmin.Controls.ToolTipContainer, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.ToolTipContainer, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;tTipRemoveButton.Parent" xml:space="preserve">
<value>flowLayoutPanel1</value>
@ -379,7 +379,7 @@
<value>tTipLogoutButton</value>
</data>
<data name="&gt;&gt;tTipLogoutButton.Type" xml:space="preserve">
<value>XenAdmin.Controls.ToolTipContainer, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.ToolTipContainer, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;tTipLogoutButton.Parent" xml:space="preserve">
<value>flowLayoutPanel1</value>
@ -436,7 +436,7 @@
<value>tTipChangeRole</value>
</data>
<data name="&gt;&gt;tTipChangeRole.Type" xml:space="preserve">
<value>XenAdmin.Controls.ToolTipContainer, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.ToolTipContainer, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;tTipChangeRole.Parent" xml:space="preserve">
<value>flowLayoutPanel1</value>
@ -826,6 +826,6 @@
<value>AdPage</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.TabPages.BaseTabPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.TabPages.BaseTabPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -322,7 +322,7 @@
<value>tTipRemoveButton</value>
</data>
<data name="&gt;&gt;tTipRemoveButton.Type" xml:space="preserve">
<value>XenAdmin.Controls.ToolTipContainer, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.ToolTipContainer, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;tTipRemoveButton.Parent" xml:space="preserve">
<value>flowLayoutPanel1</value>
@ -379,7 +379,7 @@
<value>tTipLogoutButton</value>
</data>
<data name="&gt;&gt;tTipLogoutButton.Type" xml:space="preserve">
<value>XenAdmin.Controls.ToolTipContainer, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.ToolTipContainer, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;tTipLogoutButton.Parent" xml:space="preserve">
<value>flowLayoutPanel1</value>
@ -436,7 +436,7 @@
<value>tTipChangeRole</value>
</data>
<data name="&gt;&gt;tTipChangeRole.Type" xml:space="preserve">
<value>XenAdmin.Controls.ToolTipContainer, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.ToolTipContainer, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;tTipChangeRole.Parent" xml:space="preserve">
<value>flowLayoutPanel1</value>
@ -826,6 +826,6 @@
<value>AdPage</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.TabPages.BaseTabPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.TabPages.BaseTabPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -199,7 +199,7 @@
<value>deprecationBanner1</value>
</data>
<data name="&gt;&gt;deprecationBanner1.Type" xml:space="preserve">
<value>XenAdmin.Controls.DeprecationBanner, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.DeprecationBanner, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;deprecationBanner1.Parent" xml:space="preserve">
<value>tableLayoutPanelBanner</value>
@ -298,7 +298,7 @@
<value>gradientPanel1</value>
</data>
<data name="&gt;&gt;gradientPanel1.Type" xml:space="preserve">
<value>XenAdmin.Controls.GradientPanel.HorizontalGradientPanel, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.GradientPanel.HorizontalGradientPanel, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;gradientPanel1.Parent" xml:space="preserve">
<value>$this</value>

View File

@ -199,7 +199,7 @@
<value>deprecationBanner1</value>
</data>
<data name="&gt;&gt;deprecationBanner1.Type" xml:space="preserve">
<value>XenAdmin.Controls.DeprecationBanner, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.DeprecationBanner, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;deprecationBanner1.Parent" xml:space="preserve">
<value>tableLayoutPanelBanner</value>
@ -298,7 +298,7 @@
<value>gradientPanel1</value>
</data>
<data name="&gt;&gt;gradientPanel1.Type" xml:space="preserve">
<value>XenAdmin.Controls.GradientPanel.HorizontalGradientPanel, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.GradientPanel.HorizontalGradientPanel, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;gradientPanel1.Parent" xml:space="preserve">
<value>$this</value>

View File

@ -199,7 +199,7 @@
<value>deprecationBanner1</value>
</data>
<data name="&gt;&gt;deprecationBanner1.Type" xml:space="preserve">
<value>XenAdmin.Controls.DeprecationBanner, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.DeprecationBanner, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;deprecationBanner1.Parent" xml:space="preserve">
<value>tableLayoutPanelBanner</value>
@ -298,7 +298,7 @@
<value>gradientPanel1</value>
</data>
<data name="&gt;&gt;gradientPanel1.Type" xml:space="preserve">
<value>XenAdmin.Controls.GradientPanel.HorizontalGradientPanel, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.GradientPanel.HorizontalGradientPanel, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;gradientPanel1.Parent" xml:space="preserve">
<value>$this</value>

View File

@ -157,7 +157,7 @@
<value>pdSectionReadCaching</value>
</data>
<data name="&gt;&gt;pdSectionReadCaching.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionReadCaching.Parent" xml:space="preserve">
<value>panelReadCaching</value>
@ -226,7 +226,7 @@
<value>pdSectionDockerInfo</value>
</data>
<data name="&gt;&gt;pdSectionDockerInfo.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionDockerInfo.Parent" xml:space="preserve">
<value>panelDockerInfo</value>
@ -295,7 +295,7 @@
<value>pdSectionDockerVersion</value>
</data>
<data name="&gt;&gt;pdSectionDockerVersion.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionDockerVersion.Parent" xml:space="preserve">
<value>panelDockerVersion</value>
@ -364,7 +364,7 @@
<value>pdSectionStorageLinkSystemCapabilities</value>
</data>
<data name="&gt;&gt;pdSectionStorageLinkSystemCapabilities.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionStorageLinkSystemCapabilities.Parent" xml:space="preserve">
<value>panelStorageLinkSystemCapabilities</value>
@ -433,7 +433,7 @@
<value>pdSectionMultipathBoot</value>
</data>
<data name="&gt;&gt;pdSectionMultipathBoot.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionMultipathBoot.Parent" xml:space="preserve">
<value>panelMultipathBoot</value>
@ -502,7 +502,7 @@
<value>pdStorageLink</value>
</data>
<data name="&gt;&gt;pdStorageLink.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdStorageLink.Parent" xml:space="preserve">
<value>panelStorageLink</value>
@ -571,7 +571,7 @@
<value>pdSectionVCPUs</value>
</data>
<data name="&gt;&gt;pdSectionVCPUs.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionVCPUs.Parent" xml:space="preserve">
<value>panelMemoryAndVCPUs</value>
@ -640,7 +640,7 @@
<value>pdSectionMultipathing</value>
</data>
<data name="&gt;&gt;pdSectionMultipathing.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionMultipathing.Parent" xml:space="preserve">
<value>panelMultipathing</value>
@ -709,7 +709,7 @@
<value>pdSectionStatus</value>
</data>
<data name="&gt;&gt;pdSectionStatus.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionStatus.Parent" xml:space="preserve">
<value>panelStatus</value>
@ -778,7 +778,7 @@
<value>pdSectionHighAvailability</value>
</data>
<data name="&gt;&gt;pdSectionHighAvailability.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionHighAvailability.Parent" xml:space="preserve">
<value>panelHighAvailability</value>
@ -847,7 +847,7 @@
<value>pdSectionBootOptions</value>
</data>
<data name="&gt;&gt;pdSectionBootOptions.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionBootOptions.Parent" xml:space="preserve">
<value>panelBootOptions</value>
@ -916,7 +916,7 @@
<value>pdSectionCPU</value>
</data>
<data name="&gt;&gt;pdSectionCPU.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionCPU.Parent" xml:space="preserve">
<value>panelCPU</value>
@ -985,7 +985,7 @@
<value>pdSectionMemory</value>
</data>
<data name="&gt;&gt;pdSectionMemory.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionMemory.Parent" xml:space="preserve">
<value>panelMemory</value>
@ -1054,7 +1054,7 @@
<value>pdSectionManagementInterfaces</value>
</data>
<data name="&gt;&gt;pdSectionManagementInterfaces.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionManagementInterfaces.Parent" xml:space="preserve">
<value>panelManagementInterfaces</value>
@ -1123,7 +1123,7 @@
<value>pdSectionUpdates</value>
</data>
<data name="&gt;&gt;pdSectionUpdates.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionUpdates.Parent" xml:space="preserve">
<value>panelUpdates</value>
@ -1192,7 +1192,7 @@
<value>pdSectionVersion</value>
</data>
<data name="&gt;&gt;pdSectionVersion.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionVersion.Parent" xml:space="preserve">
<value>panelVersion</value>
@ -1261,7 +1261,7 @@
<value>pdSectionLicense</value>
</data>
<data name="&gt;&gt;pdSectionLicense.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionLicense.Parent" xml:space="preserve">
<value>panelLicense</value>
@ -1330,7 +1330,7 @@
<value>pdSectionCustomFields</value>
</data>
<data name="&gt;&gt;pdSectionCustomFields.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionCustomFields.Parent" xml:space="preserve">
<value>panelCustomFields</value>
@ -1399,7 +1399,7 @@
<value>pdSectionCertificate</value>
</data>
<data name="&gt;&gt;pdSectionCertificate.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionCertificate.Parent" xml:space="preserve">
<value>panelCertificate</value>
@ -1468,7 +1468,7 @@
<value>pdSectionGeneral</value>
</data>
<data name="&gt;&gt;pdSectionGeneral.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionGeneral.Parent" xml:space="preserve">
<value>panelGeneral</value>
@ -1519,7 +1519,7 @@
<value>panel2</value>
</data>
<data name="&gt;&gt;panel2.Type" xml:space="preserve">
<value>XenAdmin.Controls.PanelNoFocusScroll, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PanelNoFocusScroll, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;panel2.Parent" xml:space="preserve">
<value>pageContainerPanel</value>
@ -1687,6 +1687,6 @@
<value>GeneralTabPage</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.TabPages.BaseTabPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.TabPages.BaseTabPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -157,7 +157,7 @@
<value>pdSectionReadCaching</value>
</data>
<data name="&gt;&gt;pdSectionReadCaching.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionReadCaching.Parent" xml:space="preserve">
<value>panelReadCaching</value>
@ -226,7 +226,7 @@
<value>pdSectionDockerInfo</value>
</data>
<data name="&gt;&gt;pdSectionDockerInfo.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionDockerInfo.Parent" xml:space="preserve">
<value>panelDockerInfo</value>
@ -295,7 +295,7 @@
<value>pdSectionDockerVersion</value>
</data>
<data name="&gt;&gt;pdSectionDockerVersion.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionDockerVersion.Parent" xml:space="preserve">
<value>panelDockerVersion</value>
@ -364,7 +364,7 @@
<value>pdSectionStorageLinkSystemCapabilities</value>
</data>
<data name="&gt;&gt;pdSectionStorageLinkSystemCapabilities.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionStorageLinkSystemCapabilities.Parent" xml:space="preserve">
<value>panelStorageLinkSystemCapabilities</value>
@ -433,7 +433,7 @@
<value>pdSectionMultipathBoot</value>
</data>
<data name="&gt;&gt;pdSectionMultipathBoot.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionMultipathBoot.Parent" xml:space="preserve">
<value>panelMultipathBoot</value>
@ -502,7 +502,7 @@
<value>pdStorageLink</value>
</data>
<data name="&gt;&gt;pdStorageLink.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdStorageLink.Parent" xml:space="preserve">
<value>panelStorageLink</value>
@ -571,7 +571,7 @@
<value>pdSectionVCPUs</value>
</data>
<data name="&gt;&gt;pdSectionVCPUs.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionVCPUs.Parent" xml:space="preserve">
<value>panelMemoryAndVCPUs</value>
@ -640,7 +640,7 @@
<value>pdSectionMultipathing</value>
</data>
<data name="&gt;&gt;pdSectionMultipathing.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionMultipathing.Parent" xml:space="preserve">
<value>panelMultipathing</value>
@ -709,7 +709,7 @@
<value>pdSectionStatus</value>
</data>
<data name="&gt;&gt;pdSectionStatus.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionStatus.Parent" xml:space="preserve">
<value>panelStatus</value>
@ -778,7 +778,7 @@
<value>pdSectionHighAvailability</value>
</data>
<data name="&gt;&gt;pdSectionHighAvailability.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionHighAvailability.Parent" xml:space="preserve">
<value>panelHighAvailability</value>
@ -847,7 +847,7 @@
<value>pdSectionBootOptions</value>
</data>
<data name="&gt;&gt;pdSectionBootOptions.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionBootOptions.Parent" xml:space="preserve">
<value>panelBootOptions</value>
@ -916,7 +916,7 @@
<value>pdSectionCPU</value>
</data>
<data name="&gt;&gt;pdSectionCPU.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionCPU.Parent" xml:space="preserve">
<value>panelCPU</value>
@ -985,7 +985,7 @@
<value>pdSectionMemory</value>
</data>
<data name="&gt;&gt;pdSectionMemory.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionMemory.Parent" xml:space="preserve">
<value>panelMemory</value>
@ -1054,7 +1054,7 @@
<value>pdSectionManagementInterfaces</value>
</data>
<data name="&gt;&gt;pdSectionManagementInterfaces.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionManagementInterfaces.Parent" xml:space="preserve">
<value>panelManagementInterfaces</value>
@ -1123,7 +1123,7 @@
<value>pdSectionUpdates</value>
</data>
<data name="&gt;&gt;pdSectionUpdates.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionUpdates.Parent" xml:space="preserve">
<value>panelUpdates</value>
@ -1192,7 +1192,7 @@
<value>pdSectionVersion</value>
</data>
<data name="&gt;&gt;pdSectionVersion.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionVersion.Parent" xml:space="preserve">
<value>panelVersion</value>
@ -1261,7 +1261,7 @@
<value>pdSectionLicense</value>
</data>
<data name="&gt;&gt;pdSectionLicense.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionLicense.Parent" xml:space="preserve">
<value>panelLicense</value>
@ -1330,7 +1330,7 @@
<value>pdSectionCustomFields</value>
</data>
<data name="&gt;&gt;pdSectionCustomFields.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionCustomFields.Parent" xml:space="preserve">
<value>panelCustomFields</value>
@ -1399,7 +1399,7 @@
<value>pdSectionCertificate</value>
</data>
<data name="&gt;&gt;pdSectionCertificate.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionCertificate.Parent" xml:space="preserve">
<value>panelCertificate</value>
@ -1468,7 +1468,7 @@
<value>pdSectionGeneral</value>
</data>
<data name="&gt;&gt;pdSectionGeneral.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionGeneral.Parent" xml:space="preserve">
<value>panelGeneral</value>
@ -1519,7 +1519,7 @@
<value>panel2</value>
</data>
<data name="&gt;&gt;panel2.Type" xml:space="preserve">
<value>XenAdmin.Controls.PanelNoFocusScroll, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PanelNoFocusScroll, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;panel2.Parent" xml:space="preserve">
<value>pageContainerPanel</value>
@ -1687,6 +1687,6 @@
<value>GeneralTabPage</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.TabPages.BaseTabPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.TabPages.BaseTabPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -157,7 +157,7 @@
<value>pdSectionReadCaching</value>
</data>
<data name="&gt;&gt;pdSectionReadCaching.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionReadCaching.Parent" xml:space="preserve">
<value>panelReadCaching</value>
@ -226,7 +226,7 @@
<value>pdSectionDockerInfo</value>
</data>
<data name="&gt;&gt;pdSectionDockerInfo.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionDockerInfo.Parent" xml:space="preserve">
<value>panelDockerInfo</value>
@ -295,7 +295,7 @@
<value>pdSectionDockerVersion</value>
</data>
<data name="&gt;&gt;pdSectionDockerVersion.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionDockerVersion.Parent" xml:space="preserve">
<value>panelDockerVersion</value>
@ -364,7 +364,7 @@
<value>pdSectionStorageLinkSystemCapabilities</value>
</data>
<data name="&gt;&gt;pdSectionStorageLinkSystemCapabilities.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionStorageLinkSystemCapabilities.Parent" xml:space="preserve">
<value>panelStorageLinkSystemCapabilities</value>
@ -433,7 +433,7 @@
<value>pdSectionMultipathBoot</value>
</data>
<data name="&gt;&gt;pdSectionMultipathBoot.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionMultipathBoot.Parent" xml:space="preserve">
<value>panelMultipathBoot</value>
@ -502,7 +502,7 @@
<value>pdStorageLink</value>
</data>
<data name="&gt;&gt;pdStorageLink.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdStorageLink.Parent" xml:space="preserve">
<value>panelStorageLink</value>
@ -571,7 +571,7 @@
<value>pdSectionVCPUs</value>
</data>
<data name="&gt;&gt;pdSectionVCPUs.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionVCPUs.Parent" xml:space="preserve">
<value>panelMemoryAndVCPUs</value>
@ -640,7 +640,7 @@
<value>pdSectionMultipathing</value>
</data>
<data name="&gt;&gt;pdSectionMultipathing.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionMultipathing.Parent" xml:space="preserve">
<value>panelMultipathing</value>
@ -709,7 +709,7 @@
<value>pdSectionStatus</value>
</data>
<data name="&gt;&gt;pdSectionStatus.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionStatus.Parent" xml:space="preserve">
<value>panelStatus</value>
@ -778,7 +778,7 @@
<value>pdSectionHighAvailability</value>
</data>
<data name="&gt;&gt;pdSectionHighAvailability.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionHighAvailability.Parent" xml:space="preserve">
<value>panelHighAvailability</value>
@ -847,7 +847,7 @@
<value>pdSectionBootOptions</value>
</data>
<data name="&gt;&gt;pdSectionBootOptions.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionBootOptions.Parent" xml:space="preserve">
<value>panelBootOptions</value>
@ -916,7 +916,7 @@
<value>pdSectionCPU</value>
</data>
<data name="&gt;&gt;pdSectionCPU.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionCPU.Parent" xml:space="preserve">
<value>panelCPU</value>
@ -985,7 +985,7 @@
<value>pdSectionMemory</value>
</data>
<data name="&gt;&gt;pdSectionMemory.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionMemory.Parent" xml:space="preserve">
<value>panelMemory</value>
@ -1054,7 +1054,7 @@
<value>pdSectionManagementInterfaces</value>
</data>
<data name="&gt;&gt;pdSectionManagementInterfaces.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionManagementInterfaces.Parent" xml:space="preserve">
<value>panelManagementInterfaces</value>
@ -1123,7 +1123,7 @@
<value>pdSectionUpdates</value>
</data>
<data name="&gt;&gt;pdSectionUpdates.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionUpdates.Parent" xml:space="preserve">
<value>panelUpdates</value>
@ -1192,7 +1192,7 @@
<value>pdSectionVersion</value>
</data>
<data name="&gt;&gt;pdSectionVersion.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionVersion.Parent" xml:space="preserve">
<value>panelVersion</value>
@ -1261,7 +1261,7 @@
<value>pdSectionLicense</value>
</data>
<data name="&gt;&gt;pdSectionLicense.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionLicense.Parent" xml:space="preserve">
<value>panelLicense</value>
@ -1330,7 +1330,7 @@
<value>pdSectionCustomFields</value>
</data>
<data name="&gt;&gt;pdSectionCustomFields.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionCustomFields.Parent" xml:space="preserve">
<value>panelCustomFields</value>
@ -1399,7 +1399,7 @@
<value>pdSectionCertificate</value>
</data>
<data name="&gt;&gt;pdSectionCertificate.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionCertificate.Parent" xml:space="preserve">
<value>panelCertificate</value>
@ -1468,7 +1468,7 @@
<value>pdSectionGeneral</value>
</data>
<data name="&gt;&gt;pdSectionGeneral.Type" xml:space="preserve">
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PDSection, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pdSectionGeneral.Parent" xml:space="preserve">
<value>panelGeneral</value>
@ -1519,7 +1519,7 @@
<value>panel2</value>
</data>
<data name="&gt;&gt;panel2.Type" xml:space="preserve">
<value>XenAdmin.Controls.PanelNoFocusScroll, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.PanelNoFocusScroll, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;panel2.Parent" xml:space="preserve">
<value>pageContainerPanel</value>
@ -1687,6 +1687,6 @@
<value>GeneralTabPage</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.TabPages.BaseTabPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.TabPages.BaseTabPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -316,7 +316,7 @@
<value>dataGridView1</value>
</data>
<data name="&gt;&gt;dataGridView1.Type" xml:space="preserve">
<value>XenAdmin.Controls.DataGridViewEx.DataGridViewEx, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.DataGridViewEx.DataGridViewEx, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;dataGridView1.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
@ -577,6 +577,6 @@
<value>DRFailoverWizardPrecheckPage</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -193,7 +193,7 @@
<value>dataGridView1</value>
</data>
<data name="&gt;&gt;dataGridView1.Type" xml:space="preserve">
<value>XenAdmin.Controls.DataGridViewEx.DataGridViewEx, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.DataGridViewEx.DataGridViewEx, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;dataGridView1.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
@ -361,6 +361,6 @@
<value>DRFailoverWizardRecoverPage</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -409,6 +409,6 @@
<value>AutomatedUpdatesBasePage</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -446,6 +446,6 @@
<value>PatchingWizard_FirstPage</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -446,6 +446,6 @@
<value>PatchingWizard_FirstPage</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -446,6 +446,6 @@
<value>PatchingWizard_FirstPage</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -292,6 +292,6 @@
<value>PatchingWizard_SelectPatchPage</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -292,6 +292,6 @@
<value>PatchingWizard_SelectPatchPage</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -292,6 +292,6 @@
<value>PatchingWizard_SelectPatchPage</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -220,7 +220,7 @@
<value>dataGridViewHosts</value>
</data>
<data name="&gt;&gt;dataGridViewHosts.Type" xml:space="preserve">
<value>XenAdmin.Wizards.PatchingWizard.PatchingWizard_SelectServers+PatchingHostsDataGridView, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Wizards.PatchingWizard.PatchingWizard_SelectServers+PatchingHostsDataGridView, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;dataGridViewHosts.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
@ -355,6 +355,6 @@
<value>PatchingWizard_SelectServers</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -220,7 +220,7 @@
<value>dataGridViewHosts</value>
</data>
<data name="&gt;&gt;dataGridViewHosts.Type" xml:space="preserve">
<value>XenAdmin.Wizards.PatchingWizard.PatchingWizard_SelectServers+PatchingHostsDataGridView, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Wizards.PatchingWizard.PatchingWizard_SelectServers+PatchingHostsDataGridView, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;dataGridViewHosts.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
@ -355,6 +355,6 @@
<value>PatchingWizard_SelectServers</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -220,7 +220,7 @@
<value>dataGridViewHosts</value>
</data>
<data name="&gt;&gt;dataGridViewHosts.Type" xml:space="preserve">
<value>XenAdmin.Wizards.PatchingWizard.PatchingWizard_SelectServers+PatchingHostsDataGridView, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Wizards.PatchingWizard.PatchingWizard_SelectServers+PatchingHostsDataGridView, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;dataGridViewHosts.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
@ -355,6 +355,6 @@
<value>PatchingWizard_SelectServers</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -382,6 +382,6 @@
<value>RollingUpgradeExtrasPage</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space]Main, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
<value>XenAdmin.Controls.XenTabPage, [XenCenter_No_Space], Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View File

@ -9,7 +9,7 @@
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>XenAdmin</RootNamespace>
<AssemblyName>[XenCenter_No_Space]Main</AssemblyName>
<AssemblyName>[XenCenter_No_Space]</AssemblyName>
<ApplicationIcon>..\Branding\Images\AppIcon.ico</ApplicationIcon>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<PublishUrl>publish\</PublishUrl>
@ -480,6 +480,12 @@
<DependentUpon>WlbThresholdsPage.cs</DependentUpon>
</Compile>
<Compile Include="Plugins\Features\ParentMenuItemFeature.cs" />
<Compile Include="SplashScreen.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="SplashScreen.Designer.cs">
<DependentUpon>SplashScreen.cs</DependentUpon>
</Compile>
<Compile Include="TabPages\BaseTabPage.cs">
<SubType>UserControl</SubType>
</Compile>
@ -2139,6 +2145,15 @@
<SubType>Designer</SubType>
<DependentUpon>WlbThresholdsPage.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SplashScreen.ja.resx">
<DependentUpon>SplashScreen.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SplashScreen.resx">
<DependentUpon>SplashScreen.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SplashScreen.zh-CN.resx">
<DependentUpon>SplashScreen.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="TabPages\AdPage.resx">
<DependentUpon>AdPage.cs</DependentUpon>
<SubType>Designer</SubType>
@ -6689,6 +6704,9 @@
<None Include="Images\VMTemplate_h32bit_32.png" />
<Content Include="Images\xcm.png" />
<Content Include="Images\xcm_32x32.png" />
<None Include="..\Branding\Images\splash.bmp">
<Link>Images\splash.bmp</Link>
</None>
<Content Include="TestResources\credits.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
@ -6770,4 +6788,4 @@
<PropertyGroup>
<PostBuildEvent>copy "$(ProjectDir)\ReportViewer\resource_report.rdlc" "$(TargetDir)"</PostBuildEvent>
</PropertyGroup>
</Project>
</Project>

View File

@ -45,7 +45,7 @@ namespace XenAdminTests.CodeTests
[TestFixture, Category(TestCategories.Unit)]
public class AssemblyTests
{
private static readonly string MainAssemblyName = $"{BrandManager.BrandConsoleNoSpace}Main";
private static readonly string MainAssemblyName = BrandManager.BrandConsoleNoSpace;
public class TestDataClass
{

View File

@ -32,6 +32,7 @@
using System;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
@ -237,29 +238,52 @@ namespace XenCenterLib
private static extern bool CloseHandle(IntPtr hObject);
private const string STOP_LISTENING_MSG = "stop-listening-on-pipe";
private const uint PIPE_CALL_TIMEOUT = 30 * 1000; //30sec
public class Pipe
{
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public readonly IntPtr Handle;
public EventHandler<PipeReadEventArgs> Read;
private readonly IntPtr Handle;
private Thread pipeThread;
private readonly string pipePath;
private volatile bool run;
/// <exception cref="Win32Exception">If creating the pipe failed for any reason.</exception>
public event Action<string> Read;
public Pipe(string path)
{
this.pipePath = path;
pipePath = path;
Handle = CreateNamedPipe(pipePath, PIPE_ACCESS_DUPLEX,
PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,
PIPE_UNLIMITED_INSTANCES, 512, 512, NMPWAIT_WAIT_FOREVER, IntPtr.Zero);
if (Handle.ToInt32() == INVALID_HANDLE_VALUE)
{
// Throw last win32 exception
throw new Win32Exception();
}
log.Error($"Creating named pipe {path} failed.", new Win32Exception());
else
log.Info($"Successfully created named pipe '{path}'.");
}
public static bool ExistsPipe(string pipePath)
{
log.Debug($"Checking {pipePath} exists");
return Directory.GetFiles(@"\\.\pipe\").Contains(pipePath);
}
/// <summary>
/// Send a message to the pipe with the given path. May block for up to PIPE_CALL_TIMEOUT milliseconds.
/// </summary>
public static void SendMessageToPipe(string pipePath, string message)
{
byte[] msg = Encoding.Unicode.GetBytes(message);
byte[] rcv = Array.Empty<byte>();
var success = CallNamedPipe(pipePath, msg, (uint)msg.Length, rcv, (uint)rcv.Length, out _, PIPE_CALL_TIMEOUT);
if (success)
log.Debug($"Message successfully forwarded to {pipePath})");
else
log.Error($"Failed to forward message to {pipePath} with native error code {new Win32Exception().NativeErrorCode}");
}
/// <summary>
@ -271,28 +295,17 @@ namespace XenCenterLib
if (pipeThread == null)
{
run = true;
pipeThread = new Thread((ThreadStart)BackgroundPipeThread);
pipeThread.Name = "Named pipe thread";
pipeThread.IsBackground = true;
pipeThread = new Thread(BackgroundPipeThread) { Name = "Named pipe thread", IsBackground = true };
pipeThread.Start();
}
}
/// <summary>
/// May block for up to 30 seconds.
/// Stops reading from this pipe. May block for up to PIPE_CALL_TIMEOUT milliseconds.
/// </summary>
public void Disconnect()
public void EndRead()
{
// Now connect to our own NamedPipe and sent a disconnect message
if (pipeThread != null)
{
byte[] msg = Encoding.UTF8.GetBytes(STOP_LISTENING_MSG);
byte[] rcv = new byte[0];
UInt32 bytesRead;
UInt32 timeout = 30 * 1000;
CallNamedPipe(pipePath, msg, (UInt32)msg.Length, rcv, (UInt32)rcv.Length, out bytesRead, timeout);
}
SendMessageToPipe(pipePath, STOP_LISTENING_MSG);
}
private void BackgroundPipeThread()
@ -306,22 +319,15 @@ namespace XenCenterLib
{
Win32Exception exn = new Win32Exception();
if (exn.NativeErrorCode == ERROR_PIPE_CONNECTED)
{
// This is OK. It simply means a remote process has connected to the
// named pipe since we did the CreateNamedPipe.
}
log.Debug("A remote process has already connected to the named pipe since we called CreateNamedPipe.");
else
{
throw new Win32Exception("ConnectNamedPipe failed", exn);
}
}
ProcessPipeMessage();
if (!DisconnectNamedPipe(Handle))
{
throw new Win32Exception("DisconnectNamedPipe failed", new Win32Exception());
}
}
catch (Exception exn)
{
@ -354,11 +360,10 @@ namespace XenCenterLib
// Peek at the pipe to see how much data is available
// Read the data and append it to the buffer
// If we get ERROR_MORE_DATA, repeat
UInt32 bytesRead, bytesAvailable, bytesLeft;
// First peek into the pipe to see how much data is waiting.
byte[] peekBuf = new byte[0];
if (!PeekNamedPipe(Handle, peekBuf, (UInt32)peekBuf.Length, out bytesRead, out bytesAvailable, out bytesLeft))
byte[] peekBuf = Array.Empty<byte>();
if (!PeekNamedPipe(Handle, peekBuf, (uint)peekBuf.Length, out var bytesRead, out var bytesAvailable, out var bytesLeft))
{
throw new Win32Exception(
string.Format("PeekNamedPipe failed. bytesRead={0} bytesAvailable={1} bytesLeft={2}",
@ -374,7 +379,7 @@ namespace XenCenterLib
// Now allocate a buffer of the correct size and read in the message.
byte[] readBuf = new byte[bytesAvailable];
if (!ReadFile(Handle, readBuf, (UInt32)readBuf.Length, out bytesRead, ref overlapped))
if (!ReadFile(Handle, readBuf, (uint)readBuf.Length, out bytesRead, ref overlapped))
{
Win32Exception exn = new Win32Exception();
if (exn.NativeErrorCode == ERROR_MORE_DATA)
@ -386,37 +391,27 @@ namespace XenCenterLib
ms.Write(readBuf, 0, (int)bytesRead);
continue;
}
else
{
throw new Win32Exception(
string.Format("ReadFile failed. readBuf.Length={0} bytesRead={1}",
readBuf.Length, bytesRead), exn);
}
}
else
{
ms.Write(readBuf, 0, (int)bytesRead);
break;
throw new Win32Exception($"ReadFile failed. readBuf.Length={readBuf.Length} bytesRead={bytesRead}", exn);
}
ms.Write(readBuf, 0, (int)bytesRead);
break;
}
readMessage = ms.ToArray();
}
// Now perform a zero-byte write. This causes the CallNamedPipe call to
// return successfully in the splash screen.
UInt32 bytesWritten;
byte[] toWrite = new byte[0];
if (!WriteFile(Handle, toWrite, (UInt32)toWrite.Length, out bytesWritten, ref overlapped))
byte[] toWrite = Array.Empty<byte>();
if (!WriteFile(Handle, toWrite, (uint)toWrite.Length, out var bytesWritten, ref overlapped))
{
throw new Win32Exception(
string.Format("WriteFile failed. toWrite.Length={0} bytesWritten={1}",
toWrite.Length, bytesWritten),
new Win32Exception());
throw new Win32Exception($"WriteFile failed. toWrite.Length={toWrite.Length} bytesWritten={bytesWritten}", new Win32Exception());
}
PipeReadEventArgs e = new PipeReadEventArgs(readMessage);
var message = Encoding.Unicode.GetString(readMessage);
if (e.Message == STOP_LISTENING_MSG)
if (message == STOP_LISTENING_MSG)
{
log.Debug("NamedPipe thread was told to stop listening");
run = false;
@ -424,20 +419,7 @@ namespace XenCenterLib
}
// Now inform any listeners of the received data.
if (Read != null)
{
Read(null, e);
}
}
}
public class PipeReadEventArgs : EventArgs
{
public readonly string Message;
public PipeReadEventArgs(byte[] bytes)
{
Message = Encoding.Unicode.GetString(bytes);
Read?.Invoke(message);
}
}
}

View File

@ -30,15 +30,6 @@ GLOBAL_BUILD_NUMBER=$1
REPO="$( cd -P "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )"
version_cpp()
{
num=$(echo "${BRANDING_XC_PRODUCT_VERSION}.${GLOBAL_BUILD_NUMBER}" | sed 's/\./, /g')
sed -b -i -e "s/1,0,0,1/${num}/g" \
-e "s/1, 0, 0, 1/${num}/g" \
-e "s/@BUILD_NUMBER@/${GLOBAL_BUILD_NUMBER}/g" \
$1
}
version_csharp()
{
sed -b -i -e "s/0\.0\.0\.0/${BRANDING_XC_PRODUCT_VERSION}.${GLOBAL_BUILD_NUMBER}/g" \
@ -64,12 +55,6 @@ rebranding_global()
$1
}
#splace rebranding
for file in splash.rc main.cpp splash.vcproj splash.vcxproj util.cpp
do
version_cpp "${REPO}/splash/${file}" && rebranding_global "${REPO}/splash/${file}"
done
#AssemblyInfo rebranding
for projectName in CommandLib xe XenAdmin XenAdminTests XenCenterLib XenModel XenOvfApi XenServerHealthCheck xva_verify
do

View File

@ -81,14 +81,14 @@ cd ${REPO} && "${MSBUILD}" ${SWITCHES} XenAdmin.sln
SIGN_BAT="${REPO}/scripts/sign.bat"
if [ -f "${SIGN_BAT}" ] ; then
for file in ${BRANDING_BRAND_CONSOLE_NO_SPACE}Main.exe CommandLib.dll MSTSCLib.dll CoreUtilsLib.dll XenModel.dll XenOvf.dll
for file in ${BRANDING_BRAND_CONSOLE_NO_SPACE}.exe CommandLib.dll MSTSCLib.dll CoreUtilsLib.dll XenModel.dll XenOvf.dll
do
cd ${REPO}/XenAdmin/bin/Release && ${SIGN_BAT} ${file} "${BRANDING_BRAND_CONSOLE}"
done
for locale in ja zh-CN
do
for file in ${BRANDING_BRAND_CONSOLE_NO_SPACE}Main.resources.dll XenModel.resources.dll XenOvf.resources.dll
for file in ${BRANDING_BRAND_CONSOLE_NO_SPACE}.resources.dll XenModel.resources.dll XenOvf.resources.dll
do
cd ${REPO}/XenAdmin/bin/Release/${locale} && ${SIGN_BAT} ${file} "${BRANDING_BRAND_CONSOLE}"
done
@ -208,12 +208,12 @@ cd ${REPO}/XenAdminTests/bin/ && zip -r ${OUTPUT_DIR}/XenAdminTests.zip Release
cd ${REPO}/XenAdmin/TestResources && zip -r ${OUTPUT_DIR}/${BRANDING_BRAND_CONSOLE_NO_SPACE}TestResources.zip *
#include cfu validator binary in output directory
cd ${REPO}/CFUValidator/bin/Release && zip ${OUTPUT_DIR}/CFUValidator.zip ./{*.dll,CFUValidator.exe,${BRANDING_BRAND_CONSOLE_NO_SPACE}Main.exe}
cd ${REPO}/CFUValidator/bin/Release && zip ${OUTPUT_DIR}/CFUValidator.zip ./{*.dll,CFUValidator.exe,${BRANDING_BRAND_CONSOLE_NO_SPACE}.exe}
#now package the pdbs
cp ${REPO}/packages/*.pdb ${OUTPUT_DIR}
cp ${REPO}/XenAdmin/bin/Release/{CommandLib.pdb,${BRANDING_BRAND_CONSOLE_NO_SPACE}.pdb,CoreUtilsLib.pdb,${BRANDING_BRAND_CONSOLE_NO_SPACE}Main.pdb,XenModel.pdb,XenOvf.pdb} \
cp ${REPO}/XenAdmin/bin/Release/{CommandLib.pdb,${BRANDING_BRAND_CONSOLE_NO_SPACE}.pdb,CoreUtilsLib.pdb,${BRANDING_BRAND_CONSOLE_NO_SPACE}.pdb,XenModel.pdb,XenOvf.pdb} \
${REPO}/xe/bin/Release/xe.pdb \
${REPO}/xva_verify/bin/Release/xva_verify.pdb \
${REPO}/XenServerHealthCheck/bin/Release/XenServerHealthCheck.pdb \

View File

@ -1,473 +0,0 @@
/* Copyright (c) Citrix Systems, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms,
* with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above
* copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
/*
* main.cpp
*
* Loads a splash screen bitmap from the resources built into the
* executable. Writes the current XenCenter version numbers onto
* the bitmap, and displays it on screen. Waits for a message
* from XenCenter, and then quits. Also monitors the XenCenter
* process, and quits if it dies (in case XenCenter crashes
* before sending the message).
*
* Parts of code taken from msdn.
*/
// Disable deprecation warnings in the CRT
#define _CRT_SECURE_NO_DEPRECATE
#include <windows.h>
#include <iostream>
#include <sstream>
#include <Tchar.h>
#include <strsafe.h>
#include <vector>
#include <Lmcons.h>
#include <fstream>
#include <ctime>
#include "resource.h"
#include "util.h"
using namespace std;
// Our own made-up IDs for timers
const int ShortTimerId = 1;
const int LongTimerId = 2;
const int ShortTimerInterval = 100;
// How long to wait for XenCenterMain to start
const int LongTimerInterval = 30000;
const int PipeTimeout = 60 * 1000;
// How long the splash should try to acquire the splashscreen lock for
const int SplashLockMaxWait = 60000;
// How many ms the splash screen should wait between attempts
const int SplashLockSleepInterval = 250;
// Size of the splash bitmap
const int ImageSizeX = 415;
const int ImageSizeY = 217;
const TCHAR SplashClassName[] = TEXT("XenCenterSplash0001");
const TCHAR PipeStub[] = TEXT("\\\\.\\pipe\\XenCenter-");
const TCHAR SplashPipeStub[] = TEXT("\\\\.\\pipe\\XenCenterSplash-");
// The path to the main C# XenCenter exe, relative to the location of the splash exe.
const TCHAR XenCenterPath[] = TEXT("[XenCenter_No_Space]Main.exe");
const size_t PathLen = 17;
#ifdef _DEBUG
const TCHAR ProductVersion[] = TEXT("0.0");
const TCHAR ProductBuild[] = TEXT("0000");
#else
const TCHAR ProductVersion[] = TEXT("[BRANDING_PRODUCT_VERSION]");
const TCHAR ProductBuild[] = TEXT("@BUILD_NUMBER@");
#endif
// The in-memory Device Context
HDC memdc;
PROCESS_INFORMATION pi;
static wstring PipeName(const TCHAR * stub, wstring mainExePath)
{
// Replace '\' with '-' in mainExePath
wstring sanitizedMainExePath(mainExePath);
{
size_t index = sanitizedMainExePath.npos;
while ((index = sanitizedMainExePath.find('\\', 0)) != sanitizedMainExePath.npos)
{
sanitizedMainExePath.replace(index, 1, 1, '-');
}
}
DWORD tmp = UNLEN + 1;
TCHAR UserName[UNLEN + 1];
GetUserName(UserName, &tmp);
DWORD pid = GetCurrentProcessId();
DWORD sid = 0;
if (0 == ProcessIdToSessionId(pid, &sid))
{
// Ignore error and force sid to 0.
sid = 0;
}
wostringstream SplashPipePath;
SplashPipePath << stub << sid << '-' << UserName << '-' << sanitizedMainExePath;
wstring s = SplashPipePath.str();
// Max length of named pipe name string is 256 chars
if (s.length() > 256)
{
s.resize(256);
}
return s;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
// Hide the window - will happen anyway if we exit, but not until
// after XenCenterMain exits if --wait was specified.
ShowWindow(hwnd, SW_HIDE);
// Line below sends a WM_QUIT message to this thread
PostQuitMessage(0);
break;
case WM_LBUTTONDOWN:
ShowWindow(hwnd, SW_HIDE);
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC screendc = BeginPaint(hwnd, &ps);
BitBlt(screendc, ps.rcPaint.left, ps.rcPaint.top, ps.rcPaint.right, ps.rcPaint.bottom,
memdc, ps.rcPaint.left, ps.rcPaint.top, SRCCOPY);
EndPaint(hwnd, &ps);
}
break;
case WM_TIMER:
{
switch (wParam)
{
case ShortTimerId:
if (WaitForSingleObject(pi.hProcess, 0) != WAIT_TIMEOUT)
{
// XenCenter has closed (e.g. crashed) without killing the splash screen: exit.
KillTimer(hwnd, ShortTimerId);
DestroyWindow(hwnd);
}
else
{
// Poll again later
SetTimer(hwnd, ShortTimerId, ShortTimerInterval, NULL);
}
break;
case LongTimerId:
// We've been open too long: close even though we haven't heard from XenCenter
DestroyWindow(hwnd);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
}
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
// Record if an error that doesn't prevent us launching XenCenterMain has occurred.
// If set to true, we write the splash log to file and launch XenCenterMain, even
// if the splash screen locking or named pipe argument passing have failed.
bool nonCriticalError = false;
// Open logging output stream. The accumulated contents of this stream are written
// to a log file only in the event of an ErrorExit.
wostringstream logStream;
time_t rawtime = time(NULL);
if (rawtime > -1)
{
logStream << TEXT("splash .exe started at ") << ctime(&rawtime) << endl;
}
else
{
logStream << TEXT("WARNING: time() returned -1") << endl;
}
// Get the full path to the splash exe
const size_t pathBufSize = 128 * 1024;
wchar_t splashExePath[pathBufSize];
DWORD pathLen = GetModuleFileName(NULL, splashExePath, pathBufSize);
if (pathLen == 0 || pathLen == pathBufSize)
{
ErrorExit(logStream, TEXT("GetModuleFileName"), true);
}
logStream << TEXT("splashExePath: ") << splashExePath << endl;
// Now work out the path to the main exe
wstring mainExePath(splashExePath);
{
size_t index = mainExePath.find_last_of('\\', pathLen);
if (index != mainExePath.npos)
{
mainExePath.resize(index);
mainExePath.push_back('\\');
}
mainExePath.append(XenCenterPath);
}
logStream << TEXT("mainExePath: ") << mainExePath << endl;
// Acquire splash screen lock
HANDLE splashPipeHandle = INVALID_HANDLE_VALUE;
{
wstring s = PipeName(SplashPipeStub, mainExePath);
logStream << "Attempting to acquire splash screen lock: " << s.c_str() << endl;
for (int numTries = 0; numTries * SplashLockSleepInterval < SplashLockMaxWait; numTries++)
{
splashPipeHandle = CreateNamedPipe(s.c_str(),
PIPE_ACCESS_DUPLEX | FILE_FLAG_FIRST_PIPE_INSTANCE,
PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, 0, 0, 0, NULL);
if (splashPipeHandle == INVALID_HANDLE_VALUE)
{
DWORD lastError = GetLastError();
if (lastError == ERROR_ACCESS_DENIED)
{
// Pipe in use. Sleep and retry.
Sleep(SplashLockSleepInterval);
}
else
{
// Unexpected error code
logStream << "WARNING: CreateNamedPipe failed with unexpected error. Error code: " << GetLastError() << endl;
nonCriticalError = true;
}
}
else
{
// We have acquired the lock
logStream << "Acquired splash screen lock" << endl;
break;
}
}
if (splashPipeHandle == INVALID_HANDLE_VALUE)
{
// Maximum attempts reached without success. Exit.
logStream << "WARNING: Couldn't acquire splash screen lock before timeout." << endl;
nonCriticalError = true;
}
}
// First try to pass the cmd line arguments into the named pipe
{
wstring s = PipeName(PipeStub, mainExePath);
logStream << TEXT("Pipe path 's': ") << s << endl;
// Allocate a buffer for data sent to us through the pipe.
// (Should never actually be any, but the command needs a buffer param anyway)
const int dataOutLength = 64 * 1024;
LPVOID dataOut = malloc(dataOutLength);
if (dataOut == NULL)
{
logStream << TEXT("WARNING: malloc dataOut failed. Error code: ") << GetLastError() << endl;
nonCriticalError = true;
}
DWORD bytesRead;
if (!CallNamedPipe(s.c_str(), lpCmdLine, (DWORD)_tcslen(lpCmdLine) * sizeof(TCHAR), dataOut, dataOutLength, &bytesRead, PipeTimeout))
{
DWORD lastError = GetLastError();
if (lastError == ERROR_FILE_NOT_FOUND)
{
logStream << TEXT("CallNamedPipe gave ERROR_FILE_NOT_FOUND: proceeding to launch XenCenter") << endl;
}
else if (lastError == ERROR_BROKEN_PIPE)
{
logStream << TEXT("CallNamedPipe gave ERROR_BROKEN_PIPE: proceeding to launch XenCenter") << endl;
}
else
{
logStream << "WARNING: CallNamedPipe failed with unexpected error. Error code: " << GetLastError() << endl;
nonCriticalError = true;
}
}
else
{
// Success: we passed the args into the pipe. Exit.
logStream << "Success: command line arguments were passed into pipe. Exiting." << endl;
exit(0);
}
free(dataOut);
}
// If we get here, sending into the pipe failed. Start XenCenter.
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
logStream << TEXT("Running CreateProcess with GetCommandLine(): ") << GetCommandLine() << endl;
if (!CreateProcess(mainExePath.c_str(), // module name
GetCommandLine(), // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
NORMAL_PRIORITY_CLASS,
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi) // Pointer to PROCESS_INFORMATION structure
)
{
ErrorExit(logStream, TEXT("CreateProcess"), true);
}
CloseHandle(pi.hThread);
if (nonCriticalError)
{
// At least we managed to launch XenCenterMain.
// Probably not appropriate to show the splash screen. Exit now.
ErrorExit(logStream, TEXT("nonCriticalError"), false);
}
// Show the splash screen. First register the window class.
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszMenuName = NULL;
wc.lpszClassName = SplashClassName;
wc.hIconSm = NULL;
if (RegisterClassEx(&wc) == NULL)
{
ErrorExit(logStream, TEXT("RegisterClassEx"), false);
}
// Get the screen (desktop) DC
HDC screendc = CreateIC(TEXT("DISPLAY"), NULL, NULL, NULL);
if (screendc == NULL)
{
ErrorExit(logStream, TEXT("CreateIC"), false);
}
// Get the primary monitor desktop size
const int screenwidth = GetSystemMetrics(SM_CXSCREEN);
const int screenheight = GetSystemMetrics(SM_CYSCREEN);
logStream << TEXT("Creating splash window") << endl;
// Create the splash window
int x = (screenwidth-ImageSizeX)/2;
int y = (screenheight-ImageSizeY)/2;
HWND hwnd = CreateWindowEx(WS_EX_TOPMOST | WS_EX_TOOLWINDOW, SplashClassName, NULL, WS_POPUP, x, y, ImageSizeX, ImageSizeY, NULL, NULL, hInstance, NULL);
if (hwnd == NULL)
{
ErrorExit(logStream, TEXT("CreateWindowEx"), false);
}
// Load the splash bitmap from the embedded resource file
HBITMAP image = (HBITMAP)LoadImage(hInstance, MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
if (image == NULL)
{
ErrorExit(logStream, TEXT("LoadImage"), false);
}
// Create the in-memory Device Context
memdc = CreateCompatibleDC(screendc);
if (memdc == NULL)
{
ErrorExit(logStream, TEXT("CreateCompatibleDC(screendc)"), false);
}
// Create a DC for the splash image
HDC filedc = CreateCompatibleDC(screendc);
if (filedc == NULL)
{
ErrorExit(logStream, TEXT("CreateCompatibleDC(filedc)"), false);
}
// Blit the splash image into the memory DC
SelectObject(filedc, image);
HBITMAP bmp = CreateCompatibleBitmap(screendc, ImageSizeX, ImageSizeY);
ReleaseDC(hwnd, screendc);
SelectObject(memdc, bmp);
BitBlt(memdc, 0, 0, ImageSizeX, ImageSizeY, filedc, 0, 0, SRCCOPY);
DeleteObject(image);
DeleteDC(filedc);
logStream << TEXT("Showing splash window") << endl;
// Show the splash window
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
// Start timer to poll for XenCenter having started
SetTimer(hwnd, ShortTimerId, ShortTimerInterval, NULL);
// Start timeout timer after which splash window closes anyway
SetTimer(hwnd, LongTimerId, LongTimerInterval, NULL);
MSG msg;
// Start message loop
while(GetMessage(&msg, NULL, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
if (!DisconnectNamedPipe(splashPipeHandle))
{
// Irritating but non-fatal
logStream << "DisconnectNamedPipe failed with error " << GetLastError() << endl;
}
if (!CloseHandle(splashPipeHandle))
{
// Likewise
logStream << "CloseHandle failed with error " << GetLastError() << endl;
}
// Check to see if args contain '--wait': if so, wait for XenCenterMain process to exit
{
wstring args(lpCmdLine);
logStream << TEXT("args: ") << args.c_str() << endl;
if (args.find(TEXT("--wait"), 0) != args.npos)
{
logStream << TEXT("--wait detected: waiting for main XenCenter process to exit") << endl;
WaitForSingleObject(pi.hProcess, INFINITE);
logStream << TEXT("XenCenter process exited") << endl;
}
else
{
CloseHandle(pi.hProcess);
}
}
logStream << TEXT("Exiting normally") << endl;
return (int)msg.wParam;
}

View File

@ -1,48 +0,0 @@
/* Copyright (c) Citrix Systems, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms,
* with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above
* copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by splash.rc
//
#define IDB_BITMAP1 101
#define IDI_ICON1 102
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 103
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View File

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
uiAccess="false"
level="asInvoker" />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

View File

@ -1,130 +0,0 @@
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "windows.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""windows.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// English (U.K.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//
IDB_BITMAP1 BITMAP "../Branding/Images/splash.bmp"
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ICON1 ICON "../Branding/Images/AppIcon.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,1
PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x17L
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "080904b0"
BEGIN
VALUE "CompanyName", "[Citrix]"
VALUE "FileDescription", "[XenCenter]"
VALUE "FileVersion", "1, 0, 0, 1"
VALUE "InternalName", "[XenCenter]"
VALUE "LegalCopyright", "Copyright \\251 [BRANDING_COMPANY_NAME_LEGAL]"
VALUE "OriginalFilename", "[XenCenter_No_Space].exe"
VALUE "ProductName", "[XenCenter]"
VALUE "ProductVersion", "1, 0, 0, 1"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x809, 1200
END
END
#endif // English (U.K.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View File

@ -1,227 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9.00"
Name="Splash"
ProjectGUID="{AFB19C9D-DD63-478B-A4A3-8452CBD0B9AB}"
RootNamespace="test"
Keyword="Win32Proj"
TargetFrameworkVersion="131072"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)XenAdmin\bin\Debug"
IntermediateDirectory="$(ProjectDir)$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories=""
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="4"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)\[XenCenter_No_Space].exe"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="2"
RandomizedBaseAddress="1"
DataExecutionPrevention="0"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
AdditionalManifestFiles="$(InputDir)\splash.manifest"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)XenAdmin\bin\Release"
IntermediateDirectory="$(ProjectDir)$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
RuntimeLibrary="0"
UsePrecompiledHeader="0"
WarningLevel="4"
WarnAsError="true"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
DisableSpecificWarnings="4995"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)\[XenCenter_No_Space].exe"
LinkIncremental="1"
AdditionalLibraryDirectories=""
GenerateDebugInformation="true"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
RandomizedBaseAddress="1"
DataExecutionPrevention="0"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
AdditionalManifestFiles="$(InputDir)\splash.manifest"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath=".\main.cpp"
>
</File>
<File
RelativePath=".\util.cpp"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath=".\resource.h"
>
</File>
<File
RelativePath=".\util.h"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
/>
</FileConfiguration>
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
<File
RelativePath=".\splash.rc"
>
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@ -1,129 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{AFB19C9D-DD63-478B-A4A3-8452CBD0B9AB}</ProjectGuid>
<RootNamespace>test</RootNamespace>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0.18362.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)XenAdmin\bin\Debug\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir)$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)XenAdmin\bin\Release\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<TargetName>[XenCenter_No_Space]</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<TargetName>[XenCenter_No_Space]</TargetName>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<Link>
<OutputFile>$(OutDir)$(TargetName).exe</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<DataExecutionPrevention>
</DataExecutionPrevention>
<TargetMachine>MachineX86</TargetMachine>
</Link>
<Manifest>
<AdditionalManifestFiles>$(ProjectDir)\splash.manifest;%(AdditionalManifestFiles)</AdditionalManifestFiles>
</Manifest>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<DisableSpecificWarnings>4995;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<OutputFile>$(OutDir)$(TargetName).exe</OutputFile>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<DataExecutionPrevention>
</DataExecutionPrevention>
<TargetMachine>MachineX86</TargetMachine>
</Link>
<Manifest>
<AdditionalManifestFiles>$(ProjectDir)\splash.manifest;%(AdditionalManifestFiles)</AdditionalManifestFiles>
</Manifest>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="main.cpp" />
<ClCompile Include="util.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="resource.h" />
<CustomBuildStep Include="util.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="splash.rc" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\XenAdmin\XenAdmin.csproj">
<Project>{70bda4bc-f062-4302-8acd-a15d8bf31d65}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -1,40 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="util.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="resource.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="splash.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<CustomBuildStep Include="util.h">
<Filter>Header Files</Filter>
</CustomBuildStep>
</ItemGroup>
</Project>

View File

@ -1,79 +0,0 @@
/* Copyright (c) Citrix Systems, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms,
* with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above
* copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <windows.h>
#include <strsafe.h>
#include <iostream>
#include <fstream>
#include <sstream>
#include <shlobj.h>
#include "util.h"
using namespace std;
void ErrorExit(wostringstream& logStream, const LPTSTR lpszFunction, bool showDialog)
{
// Retrieve the system error message for the last-error code
LPVOID lpMsgBuf;
LPVOID lpDisplayBuf;
DWORD dw = GetLastError();
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL);
// Display the error message and exit the process
lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 100) * sizeof(TCHAR));
StringCchPrintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / sizeof(TCHAR),
TEXT("%s failed with error %d: %s Please contact your support representative."), lpszFunction, dw, lpMsgBuf);
logStream << TEXT("ErrorExit called: ") << (LPTSTR)lpDisplayBuf << endl;
// Now write logStream to file
TCHAR destBuf[MAX_PATH];
wostringstream DebugFilePath;
// Get %APPDATA% path
if (SHGetSpecialFolderPath(NULL, destBuf, CSIDL_APPDATA, 1) == TRUE)
{
DebugFilePath << destBuf << "\\[Citrix]\\[XenCenter_No_Space]\\logs\\splash.log";
wofstream fileStream(DebugFilePath.str().c_str(), ios_base::out | ios_base::trunc);
fileStream << logStream.str() << endl;
}
if (showDialog)
{
// Show error to user
MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK);
}
LocalFree(lpMsgBuf);
LocalFree(lpDisplayBuf);
ExitProcess(dw);
}