From 2a5b26ba1ce23f70677092477c66e9b253c957ea Mon Sep 17 00:00:00 2001 From: omara Date: Sun, 8 Jan 2012 22:58:57 -0500 Subject: [PATCH 01/38] Exchange SP2 Addressbook Policy Support - Using this code will currently break SP1 or earlier implementation --- .../Exchange2007.cs | 73 +++++++++++++++++-- .../ExchangeTransaction.cs | 9 +++ 2 files changed, 77 insertions(+), 5 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs index efa526fd..d93036a3 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs @@ -754,6 +754,7 @@ namespace WebsitePanel.Providers.HostedSolution info.GlobalAddressList = galId; info.OrganizationId = organizationId; info.Database = databaseId; + } catch (Exception ex) { @@ -838,6 +839,12 @@ namespace WebsitePanel.Providers.HostedSolution transaction.RegisterNewOfflineAddressBook(oabId); UpdateOfflineAddressBook(runSpace, oabId, securityGroupId); info.OfflineAddressBook = oabId; + + //create ABP + string abpId = CreateAddressPolicy(runSpace, organizationId); + transaction.RegisterNewAddressPolicy(abpId); + ExchangeLog.LogInfo(" Address Policy: {0}", abpId); + } catch (Exception ex) { @@ -851,6 +858,8 @@ namespace WebsitePanel.Providers.HostedSolution CloseRunspace(runSpace); } ExchangeLog.LogEnd("CreateOrganizationOfflineAddressBookInternal"); + + return info; } @@ -919,6 +928,19 @@ namespace WebsitePanel.Providers.HostedSolution if (!DeleteOrganizationPublicFolders(runSpace, organizationId)) ret = false; + //delete ABP + + string adpstring = GetAddressPolicyName(organizationId); + try + { + if (!string.IsNullOrEmpty(adpstring)) + DeleteAddressPolicy(runSpace, adpstring); + } + catch (Exception ex) + { + ret = false; + ExchangeLog.LogError("Could not delete Address Policy " + globalAddressList, ex); + } //delete OAB try @@ -1795,6 +1817,7 @@ namespace WebsitePanel.Providers.HostedSolution //transaction.RegisterNewMailbox(id); string windowsEmailAddress = ObjToString(GetPSObjectProperty(result[0], "WindowsEmailAddress")); + string adpstring = GetAddressPolicyName(organizationId); //update mailbox cmd = new Command("Set-Mailbox"); @@ -1805,7 +1828,7 @@ namespace WebsitePanel.Providers.HostedSolution cmd.Parameters.Add("CustomAttribute3", windowsEmailAddress); cmd.Parameters.Add("PrimarySmtpAddress", upn); cmd.Parameters.Add("WindowsEmailAddress", upn); - + cmd.Parameters.Add("AddressBookPolicy", adpstring); cmd.Parameters.Add("UseDatabaseQuotaDefaults", new bool?(false)); cmd.Parameters.Add("UseDatabaseRetentionDefaults", false); cmd.Parameters.Add("IssueWarningQuota", ConvertKBToUnlimited(issueWarningKB)); @@ -1814,6 +1837,8 @@ namespace WebsitePanel.Providers.HostedSolution cmd.Parameters.Add("RetainDeletedItemsFor", ConvertDaysToEnhancedTimeSpan(keepDeletedItemsDays)); ExecuteShellCommand(runSpace, cmd); + + //update AD object string globalAddressListName = this.GetGlobalAddressListName(organizationId); string globalAddressListDN = this.GetGlobalAddressListDN(runSpace, globalAddressListName); @@ -1916,6 +1941,7 @@ namespace WebsitePanel.Providers.HostedSolution transaction.RegisterNewMailbox(id); string windowsEmailAddress = ObjToString(GetPSObjectProperty(result[0], "WindowsEmailAddress")); + string adpstring = GetAddressPolicyName(organizationId); //update mailbox cmd = new Command("Set-Mailbox"); @@ -1926,7 +1952,7 @@ namespace WebsitePanel.Providers.HostedSolution cmd.Parameters.Add("CustomAttribute3", windowsEmailAddress); cmd.Parameters.Add("PrimarySmtpAddress", upn); cmd.Parameters.Add("WindowsEmailAddress", upn); - + cmd.Parameters.Add("AddressBookPolicy", adpstring); cmd.Parameters.Add("UseDatabaseQuotaDefaults", new bool?(false)); cmd.Parameters.Add("UseDatabaseRetentionDefaults", false); cmd.Parameters.Add("IssueWarningQuota", ConvertKBToUnlimited(issueWarningKB)); @@ -4671,7 +4697,7 @@ namespace WebsitePanel.Providers.HostedSolution #endregion - #region Address Lists (GAL, AL, OAB) + #region Address Lists (GAL, AL, OAB, ABP) private string GetAddressListDN(Runspace runSpace, string id) { @@ -4755,7 +4781,6 @@ namespace WebsitePanel.Providers.HostedSolution ExchangeLog.LogEnd("UpdateAddressList"); } - private void DeleteAddressList(Runspace runSpace, string id) { ExchangeLog.LogStart("DeleteAddressList"); @@ -4814,7 +4839,6 @@ namespace WebsitePanel.Providers.HostedSolution ExchangeLog.LogEnd("UpdateGlobalAddressList"); } - private void DeleteGlobalAddressList(Runspace runSpace, string id) { ExchangeLog.LogStart("DeleteGlobalAddressList"); @@ -4880,6 +4904,41 @@ namespace WebsitePanel.Providers.HostedSolution ExchangeLog.LogEnd("DeleteOfflineAddressBook"); } + private string CreateAddressPolicy(Runspace runSpace, string organizationId) + { + ExchangeLog.LogStart("CreateAddressPolicy"); + + string ABP = GetAddressPolicyName(organizationId); + string AL = GetAddressListName(organizationId); + string GAL = GetGlobalAddressListName(organizationId); + string OAB = GetOfflineAddressBookName(organizationId); + string RL = "All Rooms"; + + Command cmd = new Command("New-AddressBookPolicy"); + cmd.Parameters.Add("Name", ABP); + cmd.Parameters.Add("GlobalAddressList", GAL); + cmd.Parameters.Add("OfflineAddressBook", OAB); + cmd.Parameters.Add("AddressLists", AL); + cmd.Parameters.Add("RoomList", RL); + + + Collection result = ExecuteShellCommand(runSpace, cmd); + string id = GetResultObjectDN(result); + + ExchangeLog.LogEnd("CreateAddressPolicy"); + return id; + } + + private void DeleteAddressPolicy(Runspace runSpace, string id) + { + ExchangeLog.LogStart("DeleteAddressPolicy"); + Command cmd = new Command("Remove-AddressBookPolicy"); + cmd.Parameters.Add("Identity", id); + cmd.Parameters.Add("Confirm", false); + ExecuteShellCommand(runSpace, cmd); + ExchangeLog.LogEnd("DeleteAddressList"); + } + private string GetAddressListName(string orgName) { return orgName + " Address List"; @@ -4894,6 +4953,10 @@ namespace WebsitePanel.Providers.HostedSolution { return orgName + " Offline Address Book"; } + private string GetAddressPolicyName(string orgName) + { + return orgName + " Address Policy"; + } #endregion diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/ExchangeTransaction.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/ExchangeTransaction.cs index 503d1343..7708ca78 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/ExchangeTransaction.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/ExchangeTransaction.cs @@ -84,6 +84,14 @@ namespace WebsitePanel.Providers.HostedSolution action.Id = id; Actions.Add(action); } + internal void RegisterNewAddressPolicy(string id) + { + TransactionAction action = new TransactionAction(); + action.ActionType = TransactionAction.TransactionActionTypes.CreateAddressPolicy; + action.Id = id; + Actions.Add(action); + } + internal void RegisterNewOfflineAddressBook(string id) { @@ -220,6 +228,7 @@ namespace WebsitePanel.Providers.HostedSolution CreateOrganizationUnit, CreateGlobalAddressList, CreateAddressList, + CreateAddressPolicy, CreateOfflineAddressBook, CreateDistributionGroup, EnableDistributionGroup, From bb71af1fa9a96e634da793c689e5c50b2a26952e Mon Sep 17 00:00:00 2001 From: omara Date: Wed, 11 Jan 2012 15:15:43 -0500 Subject: [PATCH 02/38] Change Width in Containers.css to 100% --- .../App_Themes/Default/Styles/Containers.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Themes/Default/Styles/Containers.css b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Themes/Default/Styles/Containers.css index c6c00584..bc199205 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Themes/Default/Styles/Containers.css +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_Themes/Default/Styles/Containers.css @@ -51,7 +51,7 @@ /* EDIT */ .EditContainer { - width: 720px; + width: 100%; margin-left: auto; margin-right: auto; margin-top: 20px; From 1ca6c02fd1693f818289b6fea523e452137debe1 Mon Sep 17 00:00:00 2001 From: omara Date: Wed, 11 Jan 2012 20:58:13 -0500 Subject: [PATCH 03/38] Updated ABP Code to check Exchange Version for SP2 and App Setting --- .../Exchange2007.cs | 67 ++++++++++++++----- ...bsitePanel.Providers.HostedSolution.csproj | 34 +++++----- .../Sources/WebsitePanel.Server/Web.config | 2 + 3 files changed, 68 insertions(+), 35 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs index d93036a3..b83b08d0 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs @@ -67,6 +67,7 @@ namespace WebsitePanel.Providers.HostedSolution #region Constants private const string CONFIG_CLEAR_QUERYBASEDN = "WebsitePanel.Exchange.ClearQueryBaseDN"; + private const string CONFIG_ENABLESP2ABP = "WebsitePanel.Exchange.enableSP2abp"; #endregion #region Properties @@ -841,11 +842,19 @@ namespace WebsitePanel.Providers.HostedSolution info.OfflineAddressBook = oabId; //create ABP - string abpId = CreateAddressPolicy(runSpace, organizationId); - transaction.RegisterNewAddressPolicy(abpId); - ExchangeLog.LogInfo(" Address Policy: {0}", abpId); - } + bool enableSP2abp = false; + if (ConfigurationManager.AppSettings[CONFIG_ENABLESP2ABP] != null) + enableSP2abp = Boolean.Parse(ConfigurationManager.AppSettings[CONFIG_ENABLESP2ABP]); + Version exchangeVersion = GetExchangeVersion(); + + if (enableSP2abp && (exchangeVersion >= new Version(14, 2))) + { + string abpId = CreateAddressPolicy(runSpace, organizationId); + transaction.RegisterNewAddressPolicy(abpId); + ExchangeLog.LogInfo(" Address Policy: {0}", abpId); + } + } catch (Exception ex) { ExchangeLog.LogError("CreateOrganizationOfflineAddressBookInternal", ex); @@ -930,16 +939,27 @@ namespace WebsitePanel.Providers.HostedSolution //delete ABP - string adpstring = GetAddressPolicyName(organizationId); - try + bool enableSP2abp = false; + if (ConfigurationManager.AppSettings[CONFIG_ENABLESP2ABP] != null) + enableSP2abp = Boolean.Parse(ConfigurationManager.AppSettings[CONFIG_ENABLESP2ABP]); + Version exchangeVersion = GetExchangeVersion(); + + if (enableSP2abp && (exchangeVersion >= new Version(14, 2))) { - if (!string.IsNullOrEmpty(adpstring)) - DeleteAddressPolicy(runSpace, adpstring); - } - catch (Exception ex) - { - ret = false; - ExchangeLog.LogError("Could not delete Address Policy " + globalAddressList, ex); + + + string adpstring = GetAddressPolicyName(organizationId); + + try + { + if (!string.IsNullOrEmpty(adpstring)) + DeleteAddressPolicy(runSpace, adpstring); + } + catch (Exception ex) + { + ret = false; + ExchangeLog.LogError("Could not delete Address Policy " + globalAddressList, ex); + } } //delete OAB @@ -1770,6 +1790,7 @@ namespace WebsitePanel.Providers.HostedSolution int attempts = 0; string id = null; + Version exchangeVersion = GetExchangeVersion(); try @@ -1828,7 +1849,13 @@ namespace WebsitePanel.Providers.HostedSolution cmd.Parameters.Add("CustomAttribute3", windowsEmailAddress); cmd.Parameters.Add("PrimarySmtpAddress", upn); cmd.Parameters.Add("WindowsEmailAddress", upn); - cmd.Parameters.Add("AddressBookPolicy", adpstring); + + bool enableSP2abp = false; + if (ConfigurationManager.AppSettings[CONFIG_ENABLESP2ABP] != null) + enableSP2abp = Boolean.Parse(ConfigurationManager.AppSettings[CONFIG_ENABLESP2ABP]); + if (enableSP2abp && (exchangeVersion >= new Version(14, 2))) + cmd.Parameters.Add("AddressBookPolicy", adpstring); + cmd.Parameters.Add("UseDatabaseQuotaDefaults", new bool?(false)); cmd.Parameters.Add("UseDatabaseRetentionDefaults", false); cmd.Parameters.Add("IssueWarningQuota", ConvertKBToUnlimited(issueWarningKB)); @@ -1849,7 +1876,6 @@ namespace WebsitePanel.Providers.HostedSolution bool clearQueryBaseDN = false; if (ConfigurationManager.AppSettings[CONFIG_CLEAR_QUERYBASEDN] != null) clearQueryBaseDN = Boolean.Parse(ConfigurationManager.AppSettings[CONFIG_CLEAR_QUERYBASEDN]); - Version exchangeVersion = GetExchangeVersion(); if (!(clearQueryBaseDN && (exchangeVersion >= new Version(14, 1)))) SetADObjectPropertyValue(mailbox, "msExchQueryBaseDN", globalAddressListDN); @@ -1910,6 +1936,8 @@ namespace WebsitePanel.Providers.HostedSolution ExchangeTransaction transaction = StartTransaction(); Runspace runSpace = null; + Version exchangeVersion = GetExchangeVersion(); + try { runSpace = OpenRunspace(); @@ -1952,7 +1980,13 @@ namespace WebsitePanel.Providers.HostedSolution cmd.Parameters.Add("CustomAttribute3", windowsEmailAddress); cmd.Parameters.Add("PrimarySmtpAddress", upn); cmd.Parameters.Add("WindowsEmailAddress", upn); - cmd.Parameters.Add("AddressBookPolicy", adpstring); + + bool enableSP2abp = false; + if (ConfigurationManager.AppSettings[CONFIG_ENABLESP2ABP] != null) + enableSP2abp = Boolean.Parse(ConfigurationManager.AppSettings[CONFIG_ENABLESP2ABP]); + if (enableSP2abp && (exchangeVersion >= new Version(14, 2))) + cmd.Parameters.Add("AddressBookPolicy", adpstring); + cmd.Parameters.Add("UseDatabaseQuotaDefaults", new bool?(false)); cmd.Parameters.Add("UseDatabaseRetentionDefaults", false); cmd.Parameters.Add("IssueWarningQuota", ConvertKBToUnlimited(issueWarningKB)); @@ -1970,7 +2004,6 @@ namespace WebsitePanel.Providers.HostedSolution bool clearQueryBaseDN = false; if (ConfigurationManager.AppSettings[CONFIG_CLEAR_QUERYBASEDN] != null) clearQueryBaseDN = Boolean.Parse(ConfigurationManager.AppSettings[CONFIG_CLEAR_QUERYBASEDN]); - Version exchangeVersion = GetExchangeVersion(); if (!(clearQueryBaseDN && (exchangeVersion >= new Version(14, 1)))) SetADObjectPropertyValue(mailbox, "msExchQueryBaseDN", globalAddressListDN); diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/WebsitePanel.Providers.HostedSolution.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/WebsitePanel.Providers.HostedSolution.csproj index 70640894..dbdd2a0d 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/WebsitePanel.Providers.HostedSolution.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/WebsitePanel.Providers.HostedSolution.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk @@ -80,31 +80,31 @@ False - ..\..\..\..\..\WebsitePanel.bak\WebsitePanel\Branches\1.2.0\Lib\References\Microsoft\Microsoft.Exchange.Common.dll + ..\..\Bin\Microsoft.Exchange.Common.dll False - ..\..\..\..\..\WebsitePanel.bak\WebsitePanel\Branches\1.2.0\Lib\References\Microsoft\Microsoft.Exchange.Data.dll + ..\..\Bin\Microsoft.Exchange.Data.dll False - ..\..\..\..\..\WebsitePanel.bak\WebsitePanel\Branches\1.2.0\Lib\References\Microsoft\Microsoft.Exchange.Data.Directory.dll + ..\..\Bin\Microsoft.Exchange.Data.Directory.dll False - ..\..\..\..\..\WebsitePanel.bak\WebsitePanel\Branches\1.2.0\Lib\References\Microsoft\Microsoft.Exchange.Data.Storage.dll + ..\..\Bin\Microsoft.Exchange.Data.Storage.dll False - ..\..\..\..\..\WebsitePanel.bak\WebsitePanel\Branches\1.2.0\Lib\References\Microsoft\Microsoft.Exchange.Diagnostics.dll + ..\..\Bin\Microsoft.Exchange.Diagnostics.dll False - ..\..\..\..\..\WebsitePanel.bak\WebsitePanel\Branches\1.2.0\Lib\References\Microsoft\Microsoft.Exchange.Extensibility.Internal.dll + ..\..\Bin\Microsoft.Exchange.Extensibility.Internal.dll False - ..\..\..\..\..\WebsitePanel.bak\WebsitePanel\Branches\1.2.0\Lib\References\Microsoft\Microsoft.Exchange.Net.dll + ..\..\Bin\Microsoft.Exchange.Net.dll ..\..\Lib\References\Microsoft\Microsoft.SharePoint.dll @@ -123,6 +123,14 @@ + + False + ..\..\..\bin\WebsitePanel.Providers.Base.dll + + + False + ..\..\..\bin\WebsitePanel.Server.Utils.dll + @@ -145,16 +153,6 @@ - - - {684C932A-6C75-46AC-A327-F3689D89EB42} - WebsitePanel.Providers.Base - - - {E91E52F3-9555-4D00-B577-2B1DBDD87CA7} - WebsitePanel.Server.Utils - - diff --git a/WebsitePanel/Sources/WebsitePanel.Server/Web.config b/WebsitePanel/Sources/WebsitePanel.Server/Web.config index 133e5739..dacf072e 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server/Web.config +++ b/WebsitePanel/Sources/WebsitePanel.Server/Web.config @@ -8,6 +8,8 @@ + + From d01b735e6f1180c7406dd5b0cdb77ac1c0d32e92 Mon Sep 17 00:00:00 2001 From: omara Date: Wed, 11 Jan 2012 21:02:33 -0500 Subject: [PATCH 04/38] Various changes --- .../WebsitePanel.Providers.HostedSolution/Exchange2007.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs index b83b08d0..a056c350 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs @@ -4969,7 +4969,7 @@ namespace WebsitePanel.Providers.HostedSolution cmd.Parameters.Add("Identity", id); cmd.Parameters.Add("Confirm", false); ExecuteShellCommand(runSpace, cmd); - ExchangeLog.LogEnd("DeleteAddressList"); + ExchangeLog.LogEnd("DeleteAddressPolicy"); } private string GetAddressListName(string orgName) From 97595ef942ea9ccb39ff22d08f6b71f6b3466384 Mon Sep 17 00:00:00 2001 From: feodor_fitsner Date: Thu, 19 Jan 2012 10:21:36 -0800 Subject: [PATCH 05/38] Switching to default branch --- WebsitePanel/build.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/WebsitePanel/build.xml b/WebsitePanel/build.xml index 3582414f..14ae6009 100644 --- a/WebsitePanel/build.xml +++ b/WebsitePanel/build.xml @@ -1,10 +1,10 @@ - 1.2.0.0 - 1.2.0.38 - 1.2.0 - 2011-07-13 + 1.2.1.0 + 1.2.1.0 + 1.2.1 + 2012-01-19 Release .. $(RootFolder)\WebsitePanel From 4828172c7772d9be15a04f88428ef3d09139cc3d Mon Sep 17 00:00:00 2001 From: feodor_fitsner Date: Thu, 19 Jan 2012 11:29:33 -0800 Subject: [PATCH 06/38] Added SimpleDNS to Libs --- .../Lib/References/SimpleDNS/SDNSAPI.dll | Bin 0 -> 151552 bytes WebsitePanel/Sources/VersionInfo.cs | 6 +++--- WebsitePanel/Sources/VersionInfo.vb | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 WebsitePanel/Lib/References/SimpleDNS/SDNSAPI.dll diff --git a/WebsitePanel/Lib/References/SimpleDNS/SDNSAPI.dll b/WebsitePanel/Lib/References/SimpleDNS/SDNSAPI.dll new file mode 100644 index 0000000000000000000000000000000000000000..26ddc0aeb9e4892d4562d65719d19b1bb3966262 GIT binary patch literal 151552 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 + Assembly: AssemblyVersion("1.2.1.0"), _ + Assembly: AssemblyFileVersion("1.2.1.0"), _ + Assembly: AssemblyInformationalVersion("1.2.1")> From dc1b5d5f8108563113a6a79cd096837d90c6bd36 Mon Sep 17 00:00:00 2001 From: feodor_fitsner Date: Mon, 6 Feb 2012 13:43:38 -0800 Subject: [PATCH 07/38] MSDeploy path changed in build.xml --- WebsitePanel/build.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WebsitePanel/build.xml b/WebsitePanel/build.xml index 14ae6009..97ad70b6 100644 --- a/WebsitePanel/build.xml +++ b/WebsitePanel/build.xml @@ -1,4 +1,4 @@ - + 1.2.1.0 @@ -20,7 +20,7 @@ $(TrunkFolder)\Tools\Diff.exe "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\sqlcmd.exe" -S (local)\SQLEXPRESS -E - "C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" + "C:\Program Files\IIS\Microsoft Web Deploy V2\msdeploy.exe" WebsitePanel_build server=(local)\SQLEXPRESS;database=$(DataBaseName);Integrated Security=true; From 9f7129175b1928ed74cc485936249ca48169875a Mon Sep 17 00:00:00 2001 From: feodor_fitsner Date: Mon, 6 Feb 2012 13:50:54 -0800 Subject: [PATCH 08/38] Fixed project references for HyperVForPC project. --- ...Panel.Providers.VirtualizationForPC.HyperVForPC.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/WebsitePanel.Providers.VirtualizationForPC.HyperVForPC.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/WebsitePanel.Providers.VirtualizationForPC.HyperVForPC.csproj index a431e062..a5cbf32e 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/WebsitePanel.Providers.VirtualizationForPC.HyperVForPC.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/WebsitePanel.Providers.VirtualizationForPC.HyperVForPC.csproj @@ -49,10 +49,6 @@ - - False - ..\WebsitePanel.Server\bin\WebsitePanel.Providers.Base.dll - @@ -165,6 +161,10 @@ + + {684C932A-6C75-46AC-A327-F3689D89EB42} + WebsitePanel.Providers.Base + {E91E52F3-9555-4D00-B577-2B1DBDD87CA7} WebsitePanel.Server.Utils From 6aa56903c5a4013ff4bb02bfd504250d85ccedbe Mon Sep 17 00:00:00 2001 From: feodor_fitsner Date: Mon, 6 Feb 2012 16:05:03 -0800 Subject: [PATCH 09/38] WebsitePanel.WebSite project moved from SourceForge --- WebsitePanel.WebSite/LICENSE.txt | 27 ++ WebsitePanel.WebSite/Readme.htm | 56 ++++ WebsitePanel.WebSite/ReleaseNotes.htm | 17 + .../Sources/WebsitePanel.WebSite.sln | 26 ++ .../WebsitePanel.WebSite/ContactUs.aspx | 11 + .../WebsitePanel.WebSite/ContactUs.aspx.cs | 45 +++ .../ContactUs.aspx.designer.cs | 15 + .../Content/Images/msi-icon.gif | Bin 0 -> 282 bytes .../Content/Images/page_bg.jpg | Bin 0 -> 7797 bytes .../Content/Images/pdf-icon.png | Bin 0 -> 748 bytes .../Content/Images/wsp_logo.png | Bin 0 -> 6460 bytes .../Content/Images/wsp_screenshot.png | Bin 0 -> 31884 bytes .../Content/Images/zip-icon.png | Bin 0 -> 783 bytes .../Content/Styles/Default.css | 141 ++++++++ .../Controls/SideBar.ascx | 31 ++ .../Controls/SideBar.ascx.cs | 45 +++ .../Controls/SideBar.ascx.designer.cs | 15 + .../Data/ProductReleasesFeed-dev.xml | 93 ++++++ .../Data/ProductReleasesFeed.Beta.xml | 101 ++++++ .../Data/ProductReleasesFeed.Staging.xml | 101 ++++++ .../Data/ProductReleasesFeed.xml | 164 +++++++++ .../Sources/WebsitePanel.WebSite/Default.aspx | 39 +++ .../WebsitePanel.WebSite/Default.aspx.cs | 45 +++ .../Default.aspx.designer.cs | 15 + .../WebsitePanel.WebSite/Documentation.aspx | 14 + .../Documentation.aspx.cs | 45 +++ .../Documentation.aspx.designer.cs | 15 + .../WebsitePanel.WebSite/Downloads.aspx | 28 ++ .../WebsitePanel.WebSite/Downloads.aspx.cs | 45 +++ .../Downloads.aspx.designer.cs | 15 + .../Sources/WebsitePanel.WebSite/Error.htm | 18 + .../Sources/WebsitePanel.WebSite/License.aspx | 23 ++ .../WebsitePanel.WebSite/License.aspx.cs | 45 +++ .../License.aspx.designer.cs | 16 + .../Properties/AssemblyInfo.cs | 35 ++ .../Services/InstallerService-Beta.asmx | 1 + .../Services/InstallerService-Beta.asmx.cs | 53 +++ .../Services/InstallerService-Staging.asmx | 1 + .../Services/InstallerService-Staging.asmx.cs | 53 +++ .../Services/InstallerService.asmx | 1 + .../Services/InstallerService.asmx.cs | 53 +++ .../Services/InstallerServiceBase.cs | 315 ++++++++++++++++++ .../Sources/WebsitePanel.WebSite/Site.Master | 51 +++ .../WebsitePanel.WebSite/Site.Master.cs | 45 +++ .../Site.Master.designer.cs | 52 +++ .../Sources/WebsitePanel.WebSite/Web.config | 102 ++++++ .../WebPI/2.0/WebsitePanelFeed.xml | 286 ++++++++++++++++ .../WebPI/3.0/WebsitePanelFeed.xml | 268 +++++++++++++++ .../WebsitePanel.WebSite.csproj | 202 +++++++++++ .../WebsitePanel.WebSite/WorksWith.aspx | 86 +++++ .../WebsitePanel.WebSite/WorksWith.aspx.cs | 45 +++ .../WorksWith.aspx.designer.cs | 15 + 52 files changed, 2915 insertions(+) create mode 100644 WebsitePanel.WebSite/LICENSE.txt create mode 100644 WebsitePanel.WebSite/Readme.htm create mode 100644 WebsitePanel.WebSite/ReleaseNotes.htm create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite.sln create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/ContactUs.aspx create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/ContactUs.aspx.cs create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/ContactUs.aspx.designer.cs create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Content/Images/msi-icon.gif create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Content/Images/page_bg.jpg create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Content/Images/pdf-icon.png create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Content/Images/wsp_logo.png create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Content/Images/wsp_screenshot.png create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Content/Images/zip-icon.png create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Content/Styles/Default.css create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Controls/SideBar.ascx create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Controls/SideBar.ascx.cs create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Controls/SideBar.ascx.designer.cs create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Data/ProductReleasesFeed-dev.xml create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Data/ProductReleasesFeed.Beta.xml create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Data/ProductReleasesFeed.Staging.xml create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Data/ProductReleasesFeed.xml create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Default.aspx create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Default.aspx.cs create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Default.aspx.designer.cs create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Documentation.aspx create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Documentation.aspx.cs create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Documentation.aspx.designer.cs create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Downloads.aspx create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Downloads.aspx.cs create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Downloads.aspx.designer.cs create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Error.htm create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/License.aspx create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/License.aspx.cs create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/License.aspx.designer.cs create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Properties/AssemblyInfo.cs create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService-Beta.asmx create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService-Beta.asmx.cs create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService-Staging.asmx create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService-Staging.asmx.cs create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService.asmx create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService.asmx.cs create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerServiceBase.cs create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Site.Master create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Site.Master.cs create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Site.Master.designer.cs create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Web.config create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WebPI/2.0/WebsitePanelFeed.xml create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WebPI/3.0/WebsitePanelFeed.xml create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WebsitePanel.WebSite.csproj create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WorksWith.aspx create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WorksWith.aspx.cs create mode 100644 WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WorksWith.aspx.designer.cs diff --git a/WebsitePanel.WebSite/LICENSE.txt b/WebsitePanel.WebSite/LICENSE.txt new file mode 100644 index 00000000..2a05f072 --- /dev/null +++ b/WebsitePanel.WebSite/LICENSE.txt @@ -0,0 +1,27 @@ +Copyright (c) 2010, SMB SAAS 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. + +- Neither the name of the SMB SAAS Systems Inc. nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +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 newline at end of file diff --git a/WebsitePanel.WebSite/Readme.htm b/WebsitePanel.WebSite/Readme.htm new file mode 100644 index 00000000..26d63d99 --- /dev/null +++ b/WebsitePanel.WebSite/Readme.htm @@ -0,0 +1,56 @@ + + + + WebsitePanel Web Site - Readme + + + +

+ WebsitePanel Web Site - Readme

+

+ WebsitePanel Web Site hosts a web service used by WebsitePanel Installer + for:

+
    +
  • getting the information about available WebsitePanel components and their latest + releases
  • +
  • getting update information for particular release
  • +
  • downloading WebsitePanel component distributives
  • +
+

+ The service stores the information about WebsitePanel components and their + releases in "Data\ProductReleasesFeed.xml" XML file. This XML file could be + downloaded by any external 3rd-party application.

+

+ WebsitePanel distributive installation and update files are stored in "Files" + folder. Those files could be freely downloaded by any external client provided + they know their exact URLs.

+ +

+ License

+

+ WebsitePanel Web Site is released under BSD license. Please see LICENSE.txt file in the + root folder of this project.

+ +

+ Project Structure

+

+ The project has the following folders structure:

+
    +
  • \Trunk - project version currently in development
      +
    • \Sources - project source codes.
    • +
    +
  • +
  • \Releases - contains all project releases
  • +
  • \Branches - contains project branches for proof-of-concepts, + new development, bug fixing, etc.
  • +
  • LICENSE.txt - project license
  • +
  • Readme.htm - the file you are reading right now
  • +
  • ReleaseNotes.htm - project release notes
  • +
+

+ Build How-To

+

+ Open WebsitePanel.WebSite solution in Visual Studio 2008 and build it.

+ + + \ No newline at end of file diff --git a/WebsitePanel.WebSite/ReleaseNotes.htm b/WebsitePanel.WebSite/ReleaseNotes.htm new file mode 100644 index 00000000..6e5a2cba --- /dev/null +++ b/WebsitePanel.WebSite/ReleaseNotes.htm @@ -0,0 +1,17 @@ + + + + WebsitePanel Web Site - Release Notes + + + +

+ WebsitePanel Web Site - Release Notes

+

+ April 16, 2010 - v1.0

+
    +
  • Initial release of WebsitePanel Web Site under BSD license.
  • +
+ + + \ No newline at end of file diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite.sln b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite.sln new file mode 100644 index 00000000..04267156 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite.sln @@ -0,0 +1,26 @@ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{9409302A-156B-44AF-B0B7-45D2AF13B6EE}" + ProjectSection(SolutionItems) = preProject + ..\..\LICENSE.txt = ..\..\LICENSE.txt + ..\..\Readme.htm = ..\..\Readme.htm + ..\..\ReleaseNotes.htm = ..\..\ReleaseNotes.htm + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.WebSite", "WebsitePanel.WebSite\WebsitePanel.WebSite.csproj", "{168FBFB5-D770-43DE-82F0-089D0F1FD4D6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {168FBFB5-D770-43DE-82F0-089D0F1FD4D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {168FBFB5-D770-43DE-82F0-089D0F1FD4D6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {168FBFB5-D770-43DE-82F0-089D0F1FD4D6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {168FBFB5-D770-43DE-82F0-089D0F1FD4D6}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/ContactUs.aspx b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/ContactUs.aspx new file mode 100644 index 00000000..16c42ad0 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/ContactUs.aspx @@ -0,0 +1,11 @@ +<%@ Page Title="WebsitePanel - Contact Us" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="ContactUs.aspx.cs" Inherits="WebsitePanel.WebSite.ContactUs" %> + + + +

Contact Us

+ +

WebsitePanel project is owned and maintained by SMB SAAS Systems Inc. + privately-held company located in Richmond, BC, Canada.

+

For general inquiries please contact: info@websitepanel.net

+

Do not send support requests to the e-mail above, use online forums please.

+ diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/ContactUs.aspx.cs b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/ContactUs.aspx.cs new file mode 100644 index 00000000..ec3de6e8 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/ContactUs.aspx.cs @@ -0,0 +1,45 @@ +/* Copyright (c) 2011, SMB SAAS 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. + +- Neither the name of the SMB SAAS Systems Inc. nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +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. +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace WebsitePanel.WebSite +{ + public partial class ContactUs : System.Web.UI.Page + { + protected void Page_Load(object sender, EventArgs e) + { + + } + } +} diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/ContactUs.aspx.designer.cs b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/ContactUs.aspx.designer.cs new file mode 100644 index 00000000..bacf153a --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/ContactUs.aspx.designer.cs @@ -0,0 +1,15 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WebsitePanel.WebSite { + + + public partial class ContactUs { + } +} diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Content/Images/msi-icon.gif b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Content/Images/msi-icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..e53333c59deff950ca4f17e4623ef5f1a0a0a8f4 GIT binary patch literal 282 zcmZ?wbhEHb6krfwIKlt|Z)H>%{xkgl&tRN(#yIVNTG|Uu$fPSLBit#Lt{I? zqDG3wghobIZZQo9g+fI~HZkKon+p>aSUTBElq>=ksCZ1^)#=l5SfJcInMdl#m6O5C z53wsS{;2WX!pN{dphb%HfXD&w#U8Cj9upD{crFddxAMKPK#OIrFEfMbtj*fN8<>w< mJ>_&@2<=ZQUYGkJlp(4yYwo-p0|$nfjfu=Asa}Q(4AuZ#k5;k( literal 0 HcmV?d00001 diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Content/Images/page_bg.jpg b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Content/Images/page_bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4f567472213501afdf41e6c251c322ff13a926e1 GIT binary patch literal 7797 zcmeI1eM}o=9LJyQ-O*QA3s=U>l0n%)*RYqwG46ZT~WGyJTu(<2p73$~apaK9O0~k^RB+!z= zLGvL$z@Uvl+w<&@@C)()P)BCgX5Opd*a0T&ly zLlLMPS*{XftUyAn5^l!xAZiu~hy+9eA_0-WN&+sxfe>I}7m9`SwBnwgSS)NK$zaq- zvmq~MWI_QlNry?3v62M#+GLn!c5|^}FW2o4I?8^0=e@FGKkF##u(njTgd4aXe^Y;i zYwN$Go$24rRI_EZ&Rm5(X-fve0WL-tCj-5~s4eNxWun`lEj%W5PJ4v)**uM|MGrV~ z=oZ(KNFbfV4Lh zk2!SlxSzH8XrI-~vQ~qawy*}1iKPuRYcUyEi-oPSnzopICa-QWJD#!z|HiD>?_4Ms?WBMV4i^j<819{1 zF1M2_b7q`YXkPS&TL-PBjfOLeZ$J~1WCdBoCF078KvvG;=@M~eMIb9@@pS#qa4i>$ zTo6`>30MlIr$7ThB@*F+4TBdh!*LA56;f%AOr=n%lnSLXH!okEo2SWBD%FK*O#z|R zYE`RN7Znmk`Gl4bf*>fIgW+-*#5%XJT%>#Tz*wR}`);T64>Wjb-}sip|#BsU7+uHBEtE2Po9SqC) zx_kWhMq}|kiR9k?fd>vgciHL5eCg$pW3Rk%eC))VZ=D=} z`~45joc-|JM<1X6^s@^WKmX#=<;m$QUw!?}x8HsL!_53oKVSXj+ONO;{)eCo0qBCP zC1roprGdI67=~g}K^G!Pz>aD#yu_4~U+mq zo@3+8wTad#iaI}P6viXt%sf>~w0FIlA4m-iP%WQ~Zp4W{6}Q$5?n*sJl^i78b;<$C z#!JH~zPxLXLZ5o%oSPy*rnjCYUPCCt^Eytr+iUWsD1)|238yp-r-mp%xGCV|^&=p~ z>p|*acik#z=uI#fz6)AK?$*@cDSe8kI^iv+M#AraZhS=$q2SWM7@Q3w;GH|i+D3*u zXo}dr-OKM2GHWxTi!wPpS9lO7-1YT*`Bl$JAyOUTnN8ha$m@qCuzP2rTU{4?E)|ll HNnid8M)w3G literal 0 HcmV?d00001 diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Content/Images/pdf-icon.png b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Content/Images/pdf-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..340c26fcf840dee951add255255d0cb77b93340b GIT binary patch literal 748 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 N002ovPDHLkV1gV&T`2$n literal 0 HcmV?d00001 diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Content/Styles/Default.css b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Content/Styles/Default.css new file mode 100644 index 00000000..c55ca01a --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Content/Styles/Default.css @@ -0,0 +1,141 @@ +BODY +{ + font-family: Arial,sans-serif,Tahoma,Verdana,Helvetica,Helvetica-Narrow; + font-size: 0.9em; + color: #333333; + line-height: 1.166; + margin: 0px; + padding: 0px; + background: #ffffff url('../images/page_bg.jpg') repeat-x top left; +} + +#PageOutline +{ + width: 950px; + margin-left: auto; + margin-right: auto; + margin-top: 20px; +} +#PageContainer +{ + width: 920px; + padding: 10px 10px 10px 20px; + background-color: #FFFFFF; + float: right; +} + +#Header +{ + padding-top: 10px; + padding-bottom: 10px; +} + +#SideBar +{ + padding: 15px; + float: right; + width: 270px; + background-color: #f8f8f8; +} + +#Content +{ + margin-right: 320px; +} + +.Clear +{ + clear: both; +} + +#Footer +{ + font-size: 8pt; + padding-top: 10px; + text-align: center; +} +#Footer A +{ + color: #000000; +} +H1 +{ + font-size: 1.8em; + font-weight: normal; + color: #336699; +} +H2 +{ + font-size: 1.1em; + color: #336699; +} + +#SideBar H2 +{ + margin-top: 0px; +} + +A +{ + color: #4b79aa; +} +LI +{ + padding-bottom: 4px; +} +INPUT.Button +{ + font-size: 1.2em; + padding: 5px; +} +.NewFeature +{ + color: #ff0000; +} +.Red +{ + color: #ff0000; +} +.ProductOption +{ + font-size: 1.3em; + font-weight: bold; +} +.Form +{ + background-color: #f1f7fc; + padding: 10px 20px 10px 20px; +} +.FormFooter +{ + text-align: center; + margin-top: 10px; +} +.Tips LI +{ + padding-bottom: 20px; +} + +.Download +{ + padding: 10px 10px 10px 30px; + border: 1px dashed #f0f0f0; + background-color: #f9f9f9; + background-repeat: no-repeat; + background-position: 8px center; +} + +.Download.msi +{ + background-image: url('../images/msi-icon.gif'); +} + +.Download.pdf +{ + background-image: url('../images/pdf-icon.png'); +} + +.Download.zip +{ + background-image: url('../images/zip-icon.png'); +} \ No newline at end of file diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Controls/SideBar.ascx b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Controls/SideBar.ascx new file mode 100644 index 00000000..a6db4a31 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Controls/SideBar.ascx @@ -0,0 +1,31 @@ +<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SideBar.ascx.cs" Inherits="WebsitePanel.WebSite.Controls.SideBar" %> + +

WebsitePanel

+ + +

Support Options

+ + +

Get Involved

+ + +

+ +

\ No newline at end of file diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Controls/SideBar.ascx.cs b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Controls/SideBar.ascx.cs new file mode 100644 index 00000000..8a084035 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Controls/SideBar.ascx.cs @@ -0,0 +1,45 @@ +/* Copyright (c) 2011, SMB SAAS 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. + +- Neither the name of the SMB SAAS Systems Inc. nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +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. +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace WebsitePanel.WebSite.Controls +{ + public partial class SideBar : System.Web.UI.UserControl + { + protected void Page_Load(object sender, EventArgs e) + { + + } + } +} \ No newline at end of file diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Controls/SideBar.ascx.designer.cs b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Controls/SideBar.ascx.designer.cs new file mode 100644 index 00000000..07e57472 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Controls/SideBar.ascx.designer.cs @@ -0,0 +1,15 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WebsitePanel.WebSite.Controls { + + + public partial class SideBar { + } +} diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Data/ProductReleasesFeed-dev.xml b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Data/ProductReleasesFeed-dev.xml new file mode 100644 index 00000000..e3157eb1 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Data/ProductReleasesFeed-dev.xml @@ -0,0 +1,93 @@ + + + + + + + Express setup for standalone server configuration. It installs all components on the same server and configures WebsitePanel using recommended settings. + + + + 101 + ~/Files/WebsitePanel-StandaloneServerSetup-1.0.zip + + setup\setup.dll + WebsitePanel.Setup.EnterpriseServer10 + + + + + + + + WebsitePanel Portal is a user interface to the control panel which allows managing user accounts, hosting spaces, web sites, FTP accounts, files, etc. + + + 201 + ~/Files/WebsitePanel-Portal-1.0.zip + + setup\setup.dll + WebsitePanel.Setup.Portal10 + + + + + + + + Enterprise Server is the core of WebsitePanel system. It includes all business logic of the application. Enterprise Server should have access to Server and be accessible from Portal applications. + + + 301 + ~/Files/WebsitePanel-EnterpriseServer-1.0.zip + + setup\setup.dll + WerbsitePanel.Setup.EnterpriseServer10 + + + + + + + + WebsitePanel Server is a set of services running on the remote server to be controlled. Server application should be reachable from Enterprise Server one. + + + 401 + ~/Files/WebsitePanel-Server-1.0.zip + + setup\setup.dll + WebsitePanel.Setup.Server10 + + + + + + + + Installer Core Files + + + 501 + + + + + + + + + \ No newline at end of file diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Data/ProductReleasesFeed.Beta.xml b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Data/ProductReleasesFeed.Beta.xml new file mode 100644 index 00000000..99a382c6 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Data/ProductReleasesFeed.Beta.xml @@ -0,0 +1,101 @@ + + + + + Express setup for standalone server configuration. It installs all components on the same server and configures WebsitePanel using recommended settings. + + + 105 + ~/Files/Beta/WebsitePanel-StandaloneServerSetup-1.1.1.1.zip + + setup\setup.dll + WebsitePanel.Setup.StandaloneServerSetup111 + + + + + + + WebsitePanel Portal is a user interface to the control panel which allows managing user accounts, hosting spaces, web sites, FTP accounts, files, etc. + + + 205 + ~/Files/Beta/WebsitePanel-Portal-1.1.1.1.zip + ~/Files/Beta/WebsitePanel-Portal-1.1.1.1-Update.zip + setup\setup.dll + WebsitePanel.Setup.Portal111 + + + 206 + ~/Files/1.1.0/release/WebsitePanel-Portal-1.1.0.10.zip + ~/Files/1.1.0/release/WebsitePanel-Portal-1.1.0.10-Update.zip + setup\setup.dll + WebsitePanel.Setup.Portal110 + + + + + + + Enterprise Server is the core of WebsitePanel system. It includes all business logic of the application. Enterprise Server should have access to Server and be accessible from Portal applications. + + + 305 + ~/Files/Beta/WebsitePanel-EnterpriseServer-1.1.1.1.zip + ~/Files/Beta/WebsitePanel-EnterpriseServer-1.1.1.1-Update.zip + setup\setup.dll + WebsitePanel.Setup.EnterpriseServer111 + + + 306 + ~/Files/1.1.0/release/WebsitePanel-EnterpriseServer-1.1.0.10.zip + ~/Files/1.1.0/release/WebsitePanel-EnterpriseServer-1.1.0.10-Update.zip + setup\setup.dll + WebsitePanel.Setup.EnterpriseServer110 + + + + + + + WebsitePanel Server is a set of services running on the remote server to be controlled. Server application should be reachable from Enterprise Server one. + + + 405 + ~/Files/Beta/WebsitePanel-Server-1.1.1.1.zip + ~/Files/Beta/WebsitePanel-Server-1.1.1.1-Update.zip + setup\setup.dll + WebsitePanel.Setup.Server111 + + + 406 + ~/Files/1.1.0/release/WebsitePanel-Server-1.1.0.10.zip + ~/Files/1.1.0/release/WebsitePanel-Server-1.1.0.10-Update.zip + setup\setup.dll + WebsitePanel.Setup.Server110 + + + + + + + Installer Core Files + + + + 501 + + + + + + + + + \ No newline at end of file diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Data/ProductReleasesFeed.Staging.xml b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Data/ProductReleasesFeed.Staging.xml new file mode 100644 index 00000000..babe177c --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Data/ProductReleasesFeed.Staging.xml @@ -0,0 +1,101 @@ + + + + + Express setup for standalone server configuration. It installs all components on the same server and configures WebsitePanel using recommended settings. + + + + 103 + ~/Files/WebsitePanel-StandaloneServerSetup-1.1.0.9.zip + + setup\setup.dll + WebsitePanel.Setup.StandaloneServerSetup102 + + + + + + + WebsitePanel Portal is a user interface to the control panel which allows managing user accounts, hosting spaces, web sites, FTP accounts, files, etc. + + + + 203 + ~/Files/WebsitePanel-Portal-1.1.0.9.zip + ~/Files/WebsitePanel-Portal-1.1.0.9-Update.zip + setup\setup.dll + WebsitePanel.Setup.Portal102 + + + + + + + Enterprise Server is the core of WebsitePanel system. It includes all business logic of the application. Enterprise Server should have access to Server and be accessible from Portal applications. + + + + 303 + ~/Files/WebsitePanel-EnterpriseServer-1.1.0.9.zip + ~/Files/WebsitePanel-EnterpriseServer-1.1.0.9-Update.zip + setup\setup.dll + WebsitePanel.Setup.EnterpriseServer102 + + + + + + + WebsitePanel Server is a set of services running on the remote server to be controlled. Server application should be reachable from Enterprise Server one. + + + + 403 + ~/Files/WebsitePanel-Server-1.1.0.9.zip + ~/Files/WebsitePanel-Server-1.1.0.9-Update.zip + setup\setup.dll + WebsitePanel.Setup.Server102 + + + + + + + Installer Core Files + + + 502 + + ~/Files/1.1.0/release/WebsitePanel-Installer-1.1.0-Update.zip + + + + + + + \ No newline at end of file diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Data/ProductReleasesFeed.xml b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Data/ProductReleasesFeed.xml new file mode 100644 index 00000000..6c22b6d0 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Data/ProductReleasesFeed.xml @@ -0,0 +1,164 @@ + + + + + Express setup for standalone server configuration. It installs all components on the same server and configures WebsitePanel using recommended settings. + + + 106 + ~/Files/1.1.0/release/WebsitePanel-StandaloneServerSetup-1.1.0.10.zip + + setup\setup.dll + WebsitePanel.Setup.StandaloneServerSetup110 + + + 103 + ~/Files/WebsitePanel-StandaloneServerSetup-1.0.2.0.zip + + setup\setup.dll + WebsitePanel.Setup.StandaloneServerSetup102 + + + 102 + ~/Files/WebsitePanel-StandaloneServerSetup-1.0.1.0.zip + + setup\setup.dll + WebsitePanel.Setup.StandaloneServerSetup101 + + + 101 + ~/Files/WebsitePanel-StandaloneServerSetup-1.0.zip + + setup\setup.dll + WebsitePanel.Setup.StandaloneServerSetup10 + + + + + + + WebsitePanel Portal is a user interface to the control panel which allows managing user accounts, hosting spaces, web sites, FTP accounts, files, etc. + + + 206 + ~/Files/1.1.0/release/WebsitePanel-Portal-1.1.0.10.zip + ~/Files/1.1.0/release/WebsitePanel-Portal-1.1.0.10-Update.zip + setup\setup.dll + WebsitePanel.Setup.Portal110 + + + 203 + ~/Files/WebsitePanel-Portal-1.0.2.0.zip + ~/Files/WebsitePanel-Portal-1.0.2.0-Update.zip + setup\setup.dll + WebsitePanel.Setup.Portal102 + + + 202 + ~/Files/WebsitePanel-Portal-1.0.1.0.zip + ~/Files/WebsitePanel-Portal-1.0.1.0-Update.zip + setup\setup.dll + WebsitePanel.Setup.Portal101 + + + 201 + ~/Files/WebsitePanel-Portal-1.0.zip + + setup\setup.dll + WebsitePanel.Setup.Portal10 + + + + + + + Enterprise Server is the core of WebsitePanel system. It includes all business logic of the application. Enterprise Server should have access to Server and be accessible from Portal applications. + + + 306 + ~/Files/1.1.0/release/WebsitePanel-EnterpriseServer-1.1.0.10.zip + ~/Files/1.1.0/release/WebsitePanel-EnterpriseServer-1.1.0.10-Update.zip + setup\setup.dll + WebsitePanel.Setup.EnterpriseServer110 + + + 303 + ~/Files/WebsitePanel-EnterpriseServer-1.0.2.0.zip + ~/Files/WebsitePanel-EnterpriseServer-1.0.2.0-Update.zip + setup\setup.dll + WebsitePanel.Setup.EnterpriseServer102 + + + 302 + ~/Files/WebsitePanel-EnterpriseServer-1.0.1.0.zip + ~/Files/WebsitePanel-EnterpriseServer-1.0.1.0-Update.zip + setup\setup.dll + WebsitePanel.Setup.EnterpriseServer101 + + + 301 + ~/Files/WebsitePanel-EnterpriseServer-1.0.zip + + setup\setup.dll + WebsitePanel.Setup.EnterpriseServer10 + + + + + + + WebsitePanel Server is a set of services running on the remote server to be controlled. Server application should be reachable from Enterprise Server one. + + + 406 + ~/Files/1.1.0/release/WebsitePanel-Server-1.1.0.10.zip + ~/Files/1.1.0/release/WebsitePanel-Server-1.1.0.10-Update.zip + setup\setup.dll + WebsitePanel.Setup.Server110 + + + 403 + ~/Files/WebsitePanel-Server-1.0.2.0.zip + ~/Files/WebsitePanel-Server-1.0.2.0-Update.zip + setup\setup.dll + WebsitePanel.Setup.Server102 + + + 402 + ~/Files/WebsitePanel-Server-1.0.1.0.zip + ~/Files/WebsitePanel-Server-1.0.1.0-Update.zip + setup\setup.dll + WebsitePanel.Setup.Server101 + + + 401 + ~/Files/WebsitePanel-Server-1.0.zip + + setup\setup.dll + WebsitePanel.Setup.Server10 + + + + + + + Installer Core Files + + + 502 + + ~/Files/1.1.0/release/WebsitePanel-Installer-1.1.0-Update.zip + + + + + 501 + + + + + + + + + \ No newline at end of file diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Default.aspx b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Default.aspx new file mode 100644 index 00000000..ac230d88 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Default.aspx @@ -0,0 +1,39 @@ +<%@ Page Title="WebsitePanel - The control panel for Windows hosting" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebsitePanel.WebSite.Default" %> + + + + +

Welcome to WebsitePanel project

+ +

+ WebsitePanel is an easy to use control panel for Windows hosting. It allows you to manage multiple servers, + it has a robust, scalable and secure architecture. +

+ + +

WebsitePanel Home Page + With WebsitePanel you can easily manage all your web sites, FTP accounts, databases and other resources from a single place. +

+ +

WebsitePanel highlights:

+
    +
  • It's an open source project under BSD license
  • +
  • Built exclusively for Windows platform
  • +
  • True multi-server architecture
  • +
  • Huge list of 3rd party software
  • +
  • Tight integration with Microsoft Web App Gallery
  • +
  • Easy to install and use
  • +
  • Great community support
  • +
  • Supported by Microsoft
  • +
+ +

WebsitePanel is an ideal solution for:

+
    +
  • Developers managing their own or customer servers and web sites.
  • +
  • Providers offering Windows hosting services.
  • +
  • Individuals managing their dedicated or virtual Windows servers.
  • +
+

+ Download WebsitePanel and take the most from your Windows server! +

+
\ No newline at end of file diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Default.aspx.cs b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Default.aspx.cs new file mode 100644 index 00000000..3302197b --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Default.aspx.cs @@ -0,0 +1,45 @@ +/* Copyright (c) 2011, SMB SAAS 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. + +- Neither the name of the SMB SAAS Systems Inc. nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +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. +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace WebsitePanel.WebSite +{ + public partial class Default : System.Web.UI.Page + { + protected void Page_Load(object sender, EventArgs e) + { + + } + } +} diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Default.aspx.designer.cs b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Default.aspx.designer.cs new file mode 100644 index 00000000..1ebd86ed --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Default.aspx.designer.cs @@ -0,0 +1,15 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WebsitePanel.WebSite { + + + public partial class Default { + } +} diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Documentation.aspx b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Documentation.aspx new file mode 100644 index 00000000..0a1e22fa --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Documentation.aspx @@ -0,0 +1,14 @@ +<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Documentation.aspx.cs" Inherits="WebsitePanel.WebSite.Documentation" %> + + + +

Documentation

+ +

Essential Guides

+

User the following guide to install and configure WebsitePanel. It's primarily for users installing WebsitePanel in a standalone mode:

+

WebsitePanel Installation Guide (~3 MB)

+ +

Modules

+

WebsitePanel Exchange 2010 SP1 Hosting Mode Module Guide (~300 KB)

+

Guidance for migration to Exchange 2010 SP1 Hosting Mode (~770 KB)

+
diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Documentation.aspx.cs b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Documentation.aspx.cs new file mode 100644 index 00000000..903f7d5e --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Documentation.aspx.cs @@ -0,0 +1,45 @@ +/* Copyright (c) 2011, SMB SAAS 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. + +- Neither the name of the SMB SAAS Systems Inc. nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +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. +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace WebsitePanel.WebSite +{ + public partial class Documentation : System.Web.UI.Page + { + protected void Page_Load(object sender, EventArgs e) + { + + } + } +} diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Documentation.aspx.designer.cs b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Documentation.aspx.designer.cs new file mode 100644 index 00000000..ab5ac4aa --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Documentation.aspx.designer.cs @@ -0,0 +1,15 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WebsitePanel.WebSite { + + + public partial class Documentation { + } +} diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Downloads.aspx b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Downloads.aspx new file mode 100644 index 00000000..1c41b23d --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Downloads.aspx @@ -0,0 +1,28 @@ +<%@ Page Title="WebsitePanel - Downloads" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Downloads.aspx.cs" Inherits="WebsitePanel.WebSite.Downloads" %> + + + +

Downloads

+ +

WebsitePanel Installer

+ +

WebsitePanel Installer is used for initial installation of WebsitePanel components and for their further upgrades. + WebsitePanel Installer does not include WebsitePanel distributives - they will + be downloaded during the installation or upgrade process. Use link below to + download the installer:

+

WebsitePanel Installer (~1 MB)

+ +

Tools

+ +

WebsitePanel Localization Toolkit helps users to build multi-lingual WebsitePanel Portal sites:

+

WebsitePanel Localization Toolkit 1.0 (~1 MB)

+ +

Language Packs

+

Danish Language Pack for WebsitePanel 1.0.1
(Original author: Jeppe Richardt; updated for WebsitePanel by Klaus E. Frederiksen)

+ +

German Language Pack for WebsitePanel 1.0.2
(Author: Mike Schwarz)

+ +

Templates

+

Mail templates for WebsitePanel

+ +
diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Downloads.aspx.cs b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Downloads.aspx.cs new file mode 100644 index 00000000..663ff58e --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Downloads.aspx.cs @@ -0,0 +1,45 @@ +/* Copyright (c) 2011, SMB SAAS 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. + +- Neither the name of the SMB SAAS Systems Inc. nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +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. +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace WebsitePanel.WebSite +{ + public partial class Downloads : System.Web.UI.Page + { + protected void Page_Load(object sender, EventArgs e) + { + + } + } +} diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Downloads.aspx.designer.cs b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Downloads.aspx.designer.cs new file mode 100644 index 00000000..3633f372 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Downloads.aspx.designer.cs @@ -0,0 +1,15 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WebsitePanel.WebSite { + + + public partial class Downloads { + } +} diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Error.htm b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Error.htm new file mode 100644 index 00000000..3e806714 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Error.htm @@ -0,0 +1,18 @@ + + + + WebsitePanel Error + + + +

+ Error

+

+ Sorry, an error occurred while processing your request. Please try again later.

+ + \ No newline at end of file diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/License.aspx b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/License.aspx new file mode 100644 index 00000000..c24eaf8f --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/License.aspx @@ -0,0 +1,23 @@ +<%@ Page Title="WebsitePanel - License" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="License.aspx.cs" Inherits="WebsitePanel.WebSite.License" %> + + + + +

Project License

+ +

Copyright (c) 2010, SMB SAAS 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.
  • + +
  • Neither the name of the SMB SAAS Systems Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
  • +
+ +

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.

+ +
diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/License.aspx.cs b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/License.aspx.cs new file mode 100644 index 00000000..62d8bafb --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/License.aspx.cs @@ -0,0 +1,45 @@ +/* Copyright (c) 2011, SMB SAAS 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. + +- Neither the name of the SMB SAAS Systems Inc. nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +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. +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace WebsitePanel.WebSite +{ + public partial class License : System.Web.UI.Page + { + protected void Page_Load(object sender, EventArgs e) + { + + } + } +} diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/License.aspx.designer.cs b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/License.aspx.designer.cs new file mode 100644 index 00000000..106aba95 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/License.aspx.designer.cs @@ -0,0 +1,16 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4927 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WebsitePanel.WebSite { + + + public partial class License { + } +} diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Properties/AssemblyInfo.cs b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..ec4d606d --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("WebsitePanel.WebSite")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("SMB SAAS Systems Inc.")] +[assembly: AssemblyProduct("WebsitePanel Web Site")] +[assembly: AssemblyCopyright("Copyright © 2010 SMB SAAS Systems Inc.")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("3d5900ae-111a-45be-96b3-d9e4606ca793")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService-Beta.asmx b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService-Beta.asmx new file mode 100644 index 00000000..717cb789 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService-Beta.asmx @@ -0,0 +1 @@ +<%@ WebService Language="C#" CodeBehind="InstallerService-Beta.asmx.cs" Class="WebsitePanel.WebSite.Services.InstallerService_Beta" %> diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService-Beta.asmx.cs b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService-Beta.asmx.cs new file mode 100644 index 00000000..6c3fc995 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService-Beta.asmx.cs @@ -0,0 +1,53 @@ +/* Copyright (c) 2011, SMB SAAS 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. + +- Neither the name of the SMB SAAS Systems Inc. nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +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. +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.Services; +using System.Data; + +namespace WebsitePanel.WebSite.Services +{ + /// + /// Summary description for InstallerService_Beta + /// + [WebService(Namespace = "http://websitepanel.net/services")] + [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] + [System.ComponentModel.ToolboxItem(false)] + // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. + // [System.Web.Script.Services.ScriptService] + public class InstallerService_Beta : InstallerServiceBase + { + public InstallerService_Beta() + { + RELEASES_FEED_PATH = "~/Data/ProductReleasesFeed.Beta.xml"; + } + } +} diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService-Staging.asmx b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService-Staging.asmx new file mode 100644 index 00000000..92b4beab --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService-Staging.asmx @@ -0,0 +1 @@ +<%@ WebService Language="C#" CodeBehind="InstallerService-Staging.asmx.cs" Class="WebsitePanel.WebSite.Services.InstallerService_Staging" %> diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService-Staging.asmx.cs b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService-Staging.asmx.cs new file mode 100644 index 00000000..a5bb35b1 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService-Staging.asmx.cs @@ -0,0 +1,53 @@ +/* Copyright (c) 2011, SMB SAAS 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. + +- Neither the name of the SMB SAAS Systems Inc. nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +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. +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.Services; +using System.Data; + +namespace WebsitePanel.WebSite.Services +{ + /// + /// Summary description for InstallerService_Beta + /// + [WebService(Namespace = "http://websitepanel.net/services")] + [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] + [System.ComponentModel.ToolboxItem(false)] + // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. + // [System.Web.Script.Services.ScriptService] + public class InstallerService_Staging : InstallerServiceBase + { + public InstallerService_Staging() + { + RELEASES_FEED_PATH = "~/Data/ProductReleasesFeed.Staging.xml"; + } + } +} diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService.asmx b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService.asmx new file mode 100644 index 00000000..2f37510d --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService.asmx @@ -0,0 +1 @@ +<%@ WebService Language="C#" CodeBehind="InstallerService.asmx.cs" Class="WebsitePanel.WebSite.Services.InstallerService" %> diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService.asmx.cs b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService.asmx.cs new file mode 100644 index 00000000..9ef8e693 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerService.asmx.cs @@ -0,0 +1,53 @@ +/* Copyright (c) 2011, SMB SAAS 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. + +- Neither the name of the SMB SAAS Systems Inc. nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +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. +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.Services; +using System.Data; + +namespace WebsitePanel.WebSite.Services +{ + /// + /// Summary description for InstallerService + /// + [WebService(Namespace = "http://websitepanel.net/services")] + [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] + [System.ComponentModel.ToolboxItem(false)] + // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. + // [System.Web.Script.Services.ScriptService] + public class InstallerService : InstallerServiceBase + { + public InstallerService() + { + RELEASES_FEED_PATH = "~/Data/ProductReleasesFeed.xml"; + } + } +} diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerServiceBase.cs b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerServiceBase.cs new file mode 100644 index 00000000..442aaf8a --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Services/InstallerServiceBase.cs @@ -0,0 +1,315 @@ +/* Copyright (c) 2011, SMB SAAS 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. + +- Neither the name of the SMB SAAS Systems Inc. nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +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. +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.IO; +using System.Web.Services; +using System.Data; +using System.Xml.Linq; +using System.Diagnostics; + +namespace WebsitePanel.WebSite.Services +{ + public class InstallerServiceBase + { + protected string RELEASES_FEED_PATH = "~/Data/ProductReleasesFeed.xml"; + + #region WebMethods + + [WebMethod] + public DataSet GetReleaseFileInfo(string componentCode, string version) + { + // get XML doc + XDocument xml = GetReleasesFeed(); + + // get current release + var release = (from r in xml.Descendants("release") + where r.Parent.Parent.Attribute("code").Value == componentCode + && r.Attribute("version").Value == version + select r).FirstOrDefault(); + + if (release == null) + return null; // requested release was not found + + DataSet ds = new DataSet(); + DataTable dt = ds.Tables.Add(); + dt.Columns.Add("ReleaseFileID", typeof(int)); + dt.Columns.Add("FullFilePath", typeof(string)); + dt.Columns.Add("UpgradeFilePath", typeof(string)); + dt.Columns.Add("InstallerPath", typeof(string)); + dt.Columns.Add("InstallerType", typeof(string)); + + dt.Rows.Add( + Int32.Parse(release.Element("releaseFileID").Value), + release.Element("fullFilePath").Value, + release.Element("upgradeFilePath").Value, + release.Element("installerPath").Value, + release.Element("installerType").Value); + + ds.AcceptChanges(); // save + return ds; + } + + [WebMethod] + public byte[] GetFileChunk(string fileName, int offset, int size) + { + string path = HttpContext.Current.Server.MapPath(fileName); + return GetFileBinaryContent(path, offset, size); + } + + [WebMethod] + public long GetFileSize(string fileName) + { + string path = HttpContext.Current.Server.MapPath(fileName); + long ret = 0; + if (File.Exists(path)) + { + FileInfo fi = new FileInfo(path); + ret = fi.Length; + } + return ret; + } + + [WebMethod] + public DataSet GetAvailableComponents() + { + return GetAvailableComponents(false); + } + + [WebMethod] + public DataSet GetLatestComponentUpdate(string componentCode) + { + return GetLatestComponentUpdate(componentCode, false); + } + + [WebMethod] + public DataSet GetComponentUpdate(string componentCode, string release) + { + return GetComponentUpdate(componentCode, release, false); + } + + #endregion + + public DataSet GetLatestComponentUpdate(string componentCode, bool includeBeta) + { + // get XML doc + XDocument xml = GetReleasesFeed(); + + // get all active component releases + var releases = from release in xml.Descendants("release") + where release.Parent.Parent.Attribute("code").Value == componentCode + && release.Element("upgradeFilePath") != null + && release.Element("upgradeFilePath").Value != "" + // This line has been commented because the function is used only by WebsitePanel Installer + // itself. However, it may cause an incovenience if used inappropriately. + // The Installer's releases are hidden (not available) and should not be displayed in the list of available components. + //&& Boolean.Parse(release.Attribute("available").Value) + && (includeBeta || !includeBeta && !Boolean.Parse(release.Attribute("beta").Value)) + select release; + + DataSet ds = new DataSet(); + DataTable dt = ds.Tables.Add(); + dt.Columns.Add("ReleaseFileID", typeof(int)); + dt.Columns.Add("Version", typeof(string)); + dt.Columns.Add("Beta", typeof(bool)); + dt.Columns.Add("FullFilePath", typeof(string)); + dt.Columns.Add("UpgradeFilePath", typeof(string)); + dt.Columns.Add("InstallerPath", typeof(string)); + dt.Columns.Add("InstallerType", typeof(string)); + // + var r = releases.FirstOrDefault(); + // + if (r != null) + { + dt.Rows.Add( + Int32.Parse(r.Element("releaseFileID").Value), + r.Attribute("version").Value, + Boolean.Parse(r.Attribute("beta").Value), + r.Element("fullFilePath").Value, + r.Element("upgradeFilePath").Value, + r.Element("installerPath").Value, + r.Element("installerType").Value); + } + + ds.AcceptChanges(); // save + return ds; + } + + public DataSet GetAvailableComponents(bool includeBeta) + { + XDocument xml = GetReleasesFeed(); + + // select all available components + var components = from component in xml.Descendants("component") + select component; + + // build dataset structure + DataSet ds = new DataSet(); + DataTable dt = ds.Tables.Add(); + dt.Columns.Add("ReleaseFileID", typeof(int)); + dt.Columns.Add("ApplicationName", typeof(string)); + dt.Columns.Add("Component", typeof(string)); + dt.Columns.Add("Version", typeof(string)); + dt.Columns.Add("Beta", typeof(bool)); + dt.Columns.Add("ComponentDescription", typeof(string)); + dt.Columns.Add("ComponentCode", typeof(string)); + dt.Columns.Add("ComponentName", typeof(string)); + dt.Columns.Add("FullFilePath", typeof(string)); + dt.Columns.Add("InstallerPath", typeof(string)); + dt.Columns.Add("InstallerType", typeof(string)); + + // check each component for the latest available release + foreach (var component in components) + { + var releases = from r in component.Descendants("release") + where Boolean.Parse(r.Attribute("available").Value) + && (includeBeta || !includeBeta && !Boolean.Parse(r.Attribute("beta").Value)) + select r; + + var release = releases.FirstOrDefault(); + if (release == null) + continue; // component does not have active releases + + // add line to data set + dt.Rows.Add( + Int32.Parse(release.Element("releaseFileID").Value), + component.Attribute("application").Value, + component.Attribute("application").Value + " " + component.Attribute("name").Value, + release.Attribute("version").Value, + Boolean.Parse(release.Attribute("beta").Value), + component.Element("description").Value, + component.Attribute("code").Value, + component.Attribute("name").Value, + release.Element("fullFilePath").Value, + release.Element("installerPath").Value, + release.Element("installerType").Value); + } + + ds.AcceptChanges(); // save + return ds; + } + + public DataSet GetComponentUpdate(string componentCode, string release, bool includeBeta) + { + // get XML doc + XDocument xml = GetReleasesFeed(); + + // get current release + var currentRelease = (from r in xml.Descendants("release") + where r.Parent.Parent.Attribute("code").Value == componentCode + && r.Attribute("version").Value == release + select r).FirstOrDefault(); + + if(currentRelease == null) + return null; // requested release was not found + + // get next available update + var update = (from r in currentRelease.Parent.Descendants("release") + where r.IsBefore(currentRelease) + && r.Element("upgradeFilePath") != null + && r.Element("upgradeFilePath").Value != "" + && Boolean.Parse(r.Attribute("available").Value) + && (includeBeta || !includeBeta && !Boolean.Parse(r.Attribute("beta").Value)) + select r).LastOrDefault(); + + DataSet ds = new DataSet(); + DataTable dt = ds.Tables.Add(); + dt.Columns.Add("ReleaseFileID", typeof(int)); + dt.Columns.Add("Version", typeof(string)); + dt.Columns.Add("Beta", typeof(bool)); + dt.Columns.Add("FullFilePath", typeof(string)); + dt.Columns.Add("UpgradeFilePath", typeof(string)); + dt.Columns.Add("InstallerPath", typeof(string)); + dt.Columns.Add("InstallerType", typeof(string)); + + if (update != null) + { + dt.Rows.Add( + Int32.Parse(update.Element("releaseFileID").Value), + update.Attribute("version").Value, + Boolean.Parse(update.Attribute("beta").Value), + update.Element("fullFilePath").Value, + update.Element("upgradeFilePath").Value, + update.Element("installerPath").Value, + update.Element("installerType").Value); + } + + ds.AcceptChanges(); // save + return ds; + } + + private byte[] GetFileBinaryContent(string path) + { + if (!File.Exists(path)) + return null; + + FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read); + if (stream == null) + return null; + + long length = stream.Length; + byte[] content = new byte[length]; + stream.Read(content, 0, (int)length); + stream.Close(); + return content; + } + + private byte[] GetFileBinaryContent(string path, int offset, int size) + { + if (!File.Exists(path)) + return null; + + FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read); + if (stream == null) + return null; + + long length = stream.Length; + int count = size; + if (offset + size - length > 0) + { + count = (int)(length - offset); + } + byte[] content = new byte[count]; + if (count > 0) + { + stream.Seek(offset, SeekOrigin.Begin); + stream.Read(content, 0, count); + stream.Close(); + } + return content; + } + + private XDocument GetReleasesFeed() + { + return XDocument.Load(HttpContext.Current.Server.MapPath(RELEASES_FEED_PATH)); + } + } +} diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Site.Master b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Site.Master new file mode 100644 index 00000000..cd28f360 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Site.Master @@ -0,0 +1,51 @@ +<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="WebsitePanel.WebSite.Site" %> +<%@ Register src="Controls/SideBar.ascx" tagname="SideBar" tagprefix="wsp" %> + + + + + + + + + + + +
+ +
+
+ + + + + +
+ + + + + + +
+ +
+ +
+ + +
+ +
+ + + + diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Site.Master.cs b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Site.Master.cs new file mode 100644 index 00000000..0748d616 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Site.Master.cs @@ -0,0 +1,45 @@ +/* Copyright (c) 2011, SMB SAAS 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. + +- Neither the name of the SMB SAAS Systems Inc. nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +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. +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace WebsitePanel.WebSite +{ + public partial class Site : System.Web.UI.MasterPage + { + protected void Page_Load(object sender, EventArgs e) + { + + } + } +} diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Site.Master.designer.cs b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Site.Master.designer.cs new file mode 100644 index 00000000..285c1991 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Site.Master.designer.cs @@ -0,0 +1,52 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4927 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WebsitePanel.WebSite { + + + public partial class Site { + + /// + /// head control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.ContentPlaceHolder head; + + /// + /// AspForm control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlForm AspForm; + + /// + /// SideBarContent control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::WebsitePanel.WebSite.Controls.SideBar SideBarContent; + + /// + /// ContentColumn control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.ContentPlaceHolder ContentColumn; + } +} diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Web.config b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Web.config new file mode 100644 index 00000000..0b6886f0 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/Web.config @@ -0,0 +1,102 @@ + + + + + +
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WebPI/2.0/WebsitePanelFeed.xml b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WebPI/2.0/WebsitePanelFeed.xml new file mode 100644 index 00000000..35b25f04 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WebPI/2.0/WebsitePanelFeed.xml @@ -0,0 +1,286 @@ + + + + 1.0.1 + 2011-01-12T15:09:00Z + WebsitePanel 1.1.0 + + + SMB SAAS Systems + http://www.websitepanel.net + + http://www.websitepanel.net/WebPI/2.0/WebsitePanelFeed.xml + + + WebsitePanel + WebsitePanel 1.1.0 + WebsitePanel is an easy to use control panel for Windows hosting. It allows you to manage multiple servers, it has a robust, scalable and secure architecture. With WebsitePanel you can easily manage all your web sites, FTP accounts, databases and other resources from a single place. + WebsitePanel is an easy to use control panel for Windows hosting. It allows you to manage multiple servers, it has a robust, scalable and secure architecture. With WebsitePanel you can easily manage all your web sites, FTP accounts, databases and other resources from a single place. + Control Panels + + 1.1.0 + + http://www.websitepanel.net/content/images/wsp_screenshot.png + + + SMB SAAS Systems + http://www.websitepanel.net/Contact-Us + + 2010-12-30T17:40:00Z + + + + + + %ProgramFiles%\SMB SAAS Systems\WebsitePanel Installer\WebsitePanel.Installer.exe + + + + + %ProgramFiles(x86)%\SMB SAAS Systems\WebsitePanel Installer\WebsitePanel.Installer.exe + + + + + + + + + NETFramework20SP1 + + + ASPNET + + + SQLExpress + + + + + + + + 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. + http://www.websitepanel.net/License + Terms of Use + + + + + + 1 + en + + + + + + + 5 + 2 + 2 + + + 5 + 2 + + + + + 6 + 0 + 0 + + + + + + + http://www.websitepanel.net/License + + + 1059 + http://www.websitepanel.net/Files/1.1.0/release/WebsitePanelInstaller11.msi + 0F6EAFE073590A9BFC190C72113B4B73A3A375F7 + + + + msiexec.exe + /i "%InstallerFile%" /q + + + %ProgramFiles%\SMB SAAS Systems\WebsitePanel Installer\WebsitePanel.SilentInstaller.exe + /cname:"standalone" + + + 0 + + Installation operation completed successfully. + + + + -1000 + + Failed to install WebsitePanel Standalone Setup package + + + + -999 + + Unknown component name has been supplied + + + + -998 + + Another instance of WebsitePanel installation is in progress + + + + -997 + + Not enough permissions to install run the installation + + + + -996 + + No input parameters supplied + + + + -995 + + WebsitePanel Standalone Setup or one of its parts has been already installed + + + + + + + + + 2 + en + + + + + + + 5 + 2 + 2 + + + 5 + 2 + + + + + 6 + 0 + 0 + + + + + + + http://www.websitepanel.net/License + + + 1059 + http://www.websitepanel.net/Files/1.1.0/release/WebsitePanelInstaller11.msi + 0F6EAFE073590A9BFC190C72113B4B73A3A375F7 + + + + msiexec.exe + /i "%InstallerFile%" /q + + + %ProgramFiles(x86)%\SMB SAAS Systems\WebsitePanel Installer\WebsitePanel.SilentInstaller.exe + /cname:"standalone" + + + 0 + + Installation operation completed successfully. + + + + -1000 + + Failed to install WebsitePanel Standalone Setup package + + + + -999 + + Unknown component name has been supplied + + + + -998 + + Another instance of WebsitePanel installation is in progress + + + + -997 + + Not enough permissions to install run the installation + + + + -996 + + No input parameters supplied + + + + -995 + + WebsitePanel Standalone Setup or one of its parts has been already installed + + + + + + + + + + + + + + SampleTab + My Server Tools + + + BusinessAutomation + Business Automation + Install sample product + MyServerToolsFamilyGrouping + + WebsitePanel + + + + + + + + + MyServerToolsFamilyGrouping + + productFamily + + Control Panels + + + + \ No newline at end of file diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WebPI/3.0/WebsitePanelFeed.xml b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WebPI/3.0/WebsitePanelFeed.xml new file mode 100644 index 00000000..c971c190 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WebPI/3.0/WebsitePanelFeed.xml @@ -0,0 +1,268 @@ + + + + 1.0.1 + 2011-01-12T15:09:00Z + WebsitePanel 1.1.0 + + + SMB SAAS Systems + http://www.websitepanel.net + + http://www.websitepanel.net/WebPI/3.0/WebsitePanelFeed.xml + + + WebsitePanel + WebsitePanel 1.1.0 + 1.1.0 + WebsitePanel is an easy to use control panel for Windows hosting. It allows you to manage multiple servers, it has a robust, scalable and secure architecture. With WebsitePanel you can easily manage all your web sites, FTP accounts, databases and other resources from a single place. + http://www.websitepanel.net/web/webpi/wsp + 2010-12-30T17:40:00Z + WebsitePanel is an easy to use control panel for Windows hosting. It allows you to manage multiple servers, it has a robust, scalable and secure architecture. With WebsitePanel you can easily manage all your web sites, FTP accounts, databases and other resources from a single place. + 2010-12-30T17:40:00Z + + + http://www.websitepanel.net/content/images/wsp_screenshot.png + + + SMB SAAS Systems + http://www.websitepanel.net/Contact-Us + + + + Server + ProductSpotlight + + + + + + + %ProgramFiles%\SMB SAAS Systems\WebsitePanel Installer\WebsitePanel.Installer.exe + + + + + %ProgramFiles(x86)%\SMB SAAS Systems\WebsitePanel Installer\WebsitePanel.Installer.exe + + + + + + + + + + + NETFramework20SP1 + + + ASPNET + + + SQLExpress + + + + + + + + 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. + http://www.websitepanel.net/License + Terms of Use + + + + + + 1 + en + + + + + + + 5 + 2 + 2 + + + 5 + 2 + + + + + 6 + 0 + 0 + + + + + + + http://www.websitepanel.net/License + + + 1059 + http://www.websitepanel.net/Files/1.1.0/release/WebsitePanelInstaller11.msi + 0F6EAFE073590A9BFC190C72113B4B73A3A375F7 + + + + + msiexec.exe + /i "%InstallerFile%" /q + + + %ProgramFiles%\SMB SAAS Systems\WebsitePanel Installer\WebsitePanel.SilentInstaller.exe + /cname:"standalone" + + + 0 + + Installation operation completed successfully. + + + + -1000 + + Failed to install WebsitePanel Standalone Setup package + + + + -999 + + Unknown component name has been supplied + + + + -998 + + Another instance of WebsitePanel installation is in progress + + + + -997 + + Not enough permissions to install run the installation + + + + -996 + + No input parameters supplied + + + + -995 + + WebsitePanel Standalone Setup or one of its parts has been already installed + + + + + + http://social.msdn.microsoft.com/Forums/en-US/category/websitepanel + + + + 2 + en + + + + + + + 5 + 2 + 2 + + + 5 + 2 + + + + + 6 + 0 + 0 + + + + + + + http://www.websitepanel.net/License + + + 1059 + http://www.websitepanel.net/Files/1.1.0/release/WebsitePanelInstaller11.msi + + 0F6EAFE073590A9BFC190C72113B4B73A3A375F7 + + + + msiexec.exe + /i "%InstallerFile%" /q + + + %ProgramFiles(x86)%\SMB SAAS Systems\WebsitePanel Installer\WebsitePanel.SilentInstaller.exe + /cname:"standalone" + + + 0 + + Installation operation completed successfully. + + + + -1000 + + Failed to install WebsitePanel Standalone Setup package + + + + -999 + + Unknown component name has been supplied + + + + -998 + + Another instance of WebsitePanel installation is in progress + + + + -997 + + Not enough permissions to install run the installation + + + + -996 + + No input parameters supplied + + + + -995 + + WebsitePanel Standalone Setup or one of its parts has been already installed + + + + + + http://social.msdn.microsoft.com/Forums/en-US/category/websitepanel + + + + + \ No newline at end of file diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WebsitePanel.WebSite.csproj b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WebsitePanel.WebSite.csproj new file mode 100644 index 00000000..53a912de --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WebsitePanel.WebSite.csproj @@ -0,0 +1,202 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {168FBFB5-D770-43DE-82F0-089D0F1FD4D6} + {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + WebsitePanel.WebSite + WebsitePanel.WebSite + v3.5 + + + 3.5 + + + + true + full + false + bin\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + none + true + bin\ + TRACE + prompt + 4 + AllRules.ruleset + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + Designer + + + Designer + + + Designer + + + + + Designer + + + + + + + + ContactUs.aspx + ASPXCodeBehind + + + ContactUs.aspx + + + SideBar.ascx + ASPXCodeBehind + + + SideBar.ascx + + + Default.aspx + ASPXCodeBehind + + + Default.aspx + + + Documentation.aspx + ASPXCodeBehind + + + Documentation.aspx + + + Downloads.aspx + ASPXCodeBehind + + + Downloads.aspx + + + License.aspx + ASPXCodeBehind + + + License.aspx + + + + InstallerService-Staging.asmx + + + InstallerService-Beta.asmx + + + InstallerService.asmx + + + + Site.Master + ASPXCodeBehind + + + Site.Master + + + WorksWith.aspx + ASPXCodeBehind + + + WorksWith.aspx + + + + + + + + + + + + + + + + + + Designer + + + + + + + + + + + + + + + False + True + 55696 + / + + + False + False + + + False + + + + + \ No newline at end of file diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WorksWith.aspx b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WorksWith.aspx new file mode 100644 index 00000000..9fff2c1f --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WorksWith.aspx @@ -0,0 +1,86 @@ +<%@ Page Title="WebsitePanel - 3rd Party Software" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="WorksWith.aspx.cs" Inherits="WebsitePanel.WebSite.WorksWith" %> + + + +

3rd Party Software

+

WebsitePanel works with a huge list of 3rd party products. Please note that support for the software systems managed by WebsitePanel is provided by the publisher or manufacturer of those software systems. For example support for SmarterMail is provided by SmarterTools. Likewise support for Microsoft products such as IIS is provided by Microsoft support under the standard product support channels.

+ +

Operating Systems

+
    +
  • Windows Server 2008 R2 any edition, 64 bits
  • +
  • Windows Server 2008 any edition, 32 and 64 bits 
  • +
  • Windows Server 2003 R2 any edition, 32 and 64 bits
  • +
  • Windows Server 2003 any edition, 32 and 64 bits
  • +
+ +

Web Servers

+
    +
  • IIS 7.5
  • +
  • IIS 7.0
  • +
  • IIS 6.0
  • +
  • ColdFusion 7/8/9
  • +
+ +

FTP Servers

+
    +
  • MS FTP 7.5
  • +
  • MS FTP 7.0
  • +
  • MS FTP 6.0
  • +
  • Gene6 FTP Server
  • +
  • Serv-U FTP Server 6.x
  • +
  • FileZilla FTP Server
  • +
+ +

Mail Servers

+
    +
  • SmarterMail 2.x - 7.x
  • +
  • MailEnable 2.x - 4.x
  • +
  • Merak Mail Server 8.x - 10.x
  • +
  • MDaemon 9.x - 10.x
  • +
  • hMailServer 4.x
  • +
  • ArgoMail Server 1.x
  • +
  • Ability Mail Server 2.x
  • +
+ +

Database Engines

+
    +
  • Microsoft SQL Server 2008 R2 of any edition
  • +
  • Microsoft SQL Server 2000/2005/2008 of any edition
  • +
  • Microsoft SQL Server 7.0 of any edition
  • +
  • MySQL Server of 4.0.x, 4.1.x and 5.x versions
  • +
  • Microsoft Access 2000 
  • +
+ +

DNS Servers

+
    +
  • Microsoft DNS Server (bundled with Windows Server)
  • +
  • Simple DNS Plus 4.x-5.x
  • +
  • ISC BIND DNS Server
  • +
  • Nettica DNS Service
  • +
+ +

Statistics Servers

+
    +
  • SmarterStats 3.x - 6.x
  • +
  • AWStats Statistics (free software)
  • +
+ +

Collaboration

+
    +
  • Microsoft Exchange Server 2010 SP1 installed with /hosting switch
  • +
  • Microsoft Exchange Server 2007 and 2010 +
    Please refer to this post for support status update on Exchange 2007 and 2010.
  • +
  • BlackBerry Enterprise Server
  • +
  • Windows SharePoint Services 3.0
  • +
  • SharePoint Foundation 2010
  • +
  • Office Communication Server 2007
  • +
  • Microsoft Dynamics CRM 4.0
  • +
+ +

Virtualization

+
    +
  • Hyper-V Technology
  • +
+ +
diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WorksWith.aspx.cs b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WorksWith.aspx.cs new file mode 100644 index 00000000..1351dbfc --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WorksWith.aspx.cs @@ -0,0 +1,45 @@ +/* Copyright (c) 2011, SMB SAAS 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. + +- Neither the name of the SMB SAAS Systems Inc. nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +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. +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace WebsitePanel.WebSite +{ + public partial class WorksWith : System.Web.UI.Page + { + protected void Page_Load(object sender, EventArgs e) + { + + } + } +} diff --git a/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WorksWith.aspx.designer.cs b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WorksWith.aspx.designer.cs new file mode 100644 index 00000000..252dbc73 --- /dev/null +++ b/WebsitePanel.WebSite/Sources/WebsitePanel.WebSite/WorksWith.aspx.designer.cs @@ -0,0 +1,15 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WebsitePanel.WebSite { + + + public partial class WorksWith { + } +} From 0838d93f59469643d668ad4c705396542f401f68 Mon Sep 17 00:00:00 2001 From: feodor_fitsner Date: Mon, 6 Feb 2012 16:49:32 -0800 Subject: [PATCH 10/38] Installer updated to support 1.2.1 version upgrade --- .../Sources/WebsitePanel.Installer/App.config | 2 +- .../WebsitePanel.Installer/Updater.exe | Bin 198144 -> 199168 bytes .../WebsitePanel.Setup/EnterpriseServer10.cs | 2 +- .../Sources/WebsitePanel.Setup/Portal10.cs | 2 +- .../Sources/WebsitePanel.Setup/Server10.cs | 2 +- 5 files changed, 4 insertions(+), 4 deletions(-) diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/App.config b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/App.config index 60bc4b39..18e7f2ee 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/App.config +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/App.config @@ -9,7 +9,7 @@ - + diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe index 7e9327c660faa48bc7652ef082582f74df9be38f..b3fb1974bb37500dc3e5a856fe2f9da322cfd2cb 100644 GIT binary patch delta 38937 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

=@bM!xw9m52WX7 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 diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/EnterpriseServer10.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/EnterpriseServer10.cs index 4d18a9c7..f91c163e 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/EnterpriseServer10.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/EnterpriseServer10.cs @@ -29,7 +29,7 @@ namespace WebsitePanel.Setup public static new DialogResult Update(object obj) { - return UpdateBase(obj, "1.2.0", "1.1.2", true, new InstallAction(ActionTypes.SwitchEntServer2AspNet40)); + return UpdateBase(obj, "1.2.0", "1.1.2,1.2.0", true, new InstallAction(ActionTypes.SwitchEntServer2AspNet40)); } } diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal10.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal10.cs index 67ced1c2..9924d6e4 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal10.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal10.cs @@ -29,7 +29,7 @@ namespace WebsitePanel.Setup public static new DialogResult Update(object obj) { - return UpdateBase(obj, "1.2.0", "1.1.2", false, new InstallAction(ActionTypes.SwitchWebPortal2AspNet40)); + return UpdateBase(obj, "1.2.0", "1.1.2,1.2.0", false, new InstallAction(ActionTypes.SwitchWebPortal2AspNet40)); } } diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Server10.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Server10.cs index ad241ee1..c333074b 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Server10.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Server10.cs @@ -29,7 +29,7 @@ namespace WebsitePanel.Setup public static new object Update(object obj) { - return Server.UpdateBase(obj, "1.2.0", "1.1.2", false, new InstallAction(ActionTypes.SwitchServer2AspNet40)); + return Server.UpdateBase(obj, "1.2.0", "1.1.2,1.2.0", false, new InstallAction(ActionTypes.SwitchServer2AspNet40)); } } From 0e9a2db8a4169075e4324f15391ab03674e446a1 Mon Sep 17 00:00:00 2001 From: feodor_fitsner Date: Mon, 6 Feb 2012 16:58:58 -0800 Subject: [PATCH 11/38] Updated path to WSP Installer output dir --- .../Sources/Setup/Setup.vdproj | 26 ++++++------------- 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/WebsitePanel.Installer/Sources/Setup/Setup.vdproj b/WebsitePanel.Installer/Sources/Setup/Setup.vdproj index 5bca1c16..b8775a0e 100644 --- a/WebsitePanel.Installer/Sources/Setup/Setup.vdproj +++ b/WebsitePanel.Installer/Sources/Setup/Setup.vdproj @@ -40,13 +40,13 @@ "Entry" { "MsmKey" = "8:_3FE8A1704B90098231CE54C0A887C0F9" - "OwnerKey" = "8:_1239E87E938248B1BAF9BF75C32D3EDC" + "OwnerKey" = "8:_EAE1EA76C9D31E75B8631E8C4E874282" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_3FE8A1704B90098231CE54C0A887C0F9" - "OwnerKey" = "8:_EAE1EA76C9D31E75B8631E8C4E874282" + "OwnerKey" = "8:_1239E87E938248B1BAF9BF75C32D3EDC" "MsmSig" = "8:_UNDEFINED" } "Entry" @@ -88,7 +88,7 @@ "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_05F59A142DD147798C90054A203C0EE9" + "OwnerKey" = "8:_3FE8A1704B90098231CE54C0A887C0F9" "MsmSig" = "8:_UNDEFINED" } "Entry" @@ -100,7 +100,7 @@ "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_3FE8A1704B90098231CE54C0A887C0F9" + "OwnerKey" = "8:_05F59A142DD147798C90054A203C0EE9" "MsmSig" = "8:_UNDEFINED" } } @@ -111,7 +111,7 @@ "DisplayName" = "8:Debug" "IsDebugOnly" = "11:TRUE" "IsReleaseOnly" = "11:FALSE" - "OutputFilename" = "8:..\\..\\Build\\debug\\WebsitePanelInstaller12.msi" + "OutputFilename" = "8:..\\..\\..\\WebsitePanel\\Deploy\\Debug\\WebsitePanelInstaller12.msi" "PackageFilesAs" = "3:2" "PackageFileSize" = "3:-2147483648" "CabType" = "3:1" @@ -153,7 +153,7 @@ "DisplayName" = "8:Release" "IsDebugOnly" = "11:FALSE" "IsReleaseOnly" = "11:TRUE" - "OutputFilename" = "8:..\\..\\Build\\release\\WebsitePanelInstaller12.msi" + "OutputFilename" = "8:..\\..\\..\\WebsitePanel\\Deploy\\Release\\WebsitePanelInstaller12.msi" "PackageFilesAs" = "3:2" "PackageFileSize" = "3:-2147483648" "CabType" = "3:1" @@ -235,11 +235,6 @@ "AssemblyAsmDisplayName" = "8:Ionic.Zip.Reduced, Version=1.8.4.28, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c, processorArchitecture=MSIL" "ScatterAssemblies" { - "_3FE8A1704B90098231CE54C0A887C0F9" - { - "Name" = "8:Ionic.Zip.Reduced.dll" - "Attributes" = "3:512" - } } "SourcePath" = "8:Ionic.Zip.Reduced.dll" "TargetName" = "8:" @@ -326,11 +321,6 @@ "AssemblyAsmDisplayName" = "8:WebsitePanel.Installer.Core, Version=1.2.0.0, Culture=neutral, processorArchitecture=MSIL" "ScatterAssemblies" { - "_EAE1EA76C9D31E75B8631E8C4E874282" - { - "Name" = "8:WebsitePanel.Installer.Core.dll" - "Attributes" = "3:512" - } } "SourcePath" = "8:WebsitePanel.Installer.Core.dll" "TargetName" = "8:" @@ -977,7 +967,7 @@ { "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_05F59A142DD147798C90054A203C0EE9" { - "SourcePath" = "8:..\\WebsitePanel.Installer\\obj\\Release\\WebsitePanel.Installer.exe" + "SourcePath" = "8:..\\WebsitePanel.Installer\\obj\\Debug\\WebsitePanel.Installer.exe" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_E742E59BFE4D43C59AA65A07792B89FB" @@ -1005,7 +995,7 @@ } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_1239E87E938248B1BAF9BF75C32D3EDC" { - "SourcePath" = "8:..\\WebsitePanel.SilentInstaller\\obj\\x86\\Release\\WebsitePanel.SilentInstaller.exe" + "SourcePath" = "8:..\\WebsitePanel.SilentInstaller\\obj\\x86\\Debug\\WebsitePanel.SilentInstaller.exe" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_E742E59BFE4D43C59AA65A07792B89FB" From 4a16ca9524ad72b3d852040b56533fb55f279342 Mon Sep 17 00:00:00 2001 From: ptsurbeleu Date: Wed, 8 Feb 2012 19:06:20 -0800 Subject: [PATCH 12/38] Fixed issue with removing folders, users and groups in HeliconApe for a web site; Added checks values conversion utility routines to avoid perf hits caused by exceptions being thrown; --- .../Code/PortalUtils.cs | 782 +++++++++--------- .../WebSitesHeliconApeControl.ascx.cs | 59 +- 2 files changed, 422 insertions(+), 419 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/Code/PortalUtils.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/Code/PortalUtils.cs index d9150ee9..48652477 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/Code/PortalUtils.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/Code/PortalUtils.cs @@ -50,40 +50,40 @@ using WebsitePanel.WebPortal; namespace WebsitePanel.Portal { - public class PortalUtils - { - public const string SharedResourcesFile = "SharedResources.ascx.resx"; + public class PortalUtils + { + public const string SharedResourcesFile = "SharedResources.ascx.resx"; public const string CONFIG_FOLDER = "~/App_Data/"; - public const string SUPPORTED_THEMES_FILE = "SupportedThemes.config"; - public const string SUPPORTED_LOCALES_FILE = "SupportedLocales.config"; + public const string SUPPORTED_THEMES_FILE = "SupportedThemes.config"; + public const string SUPPORTED_LOCALES_FILE = "SupportedLocales.config"; public const string USER_ID_PARAM = "UserID"; public const string SPACE_ID_PARAM = "SpaceID"; public const string SEARCH_QUERY_PARAM = "Query"; - public static string CultureCookieName - { - get { return PortalConfiguration.SiteSettings["CultureCookieName"]; } - } + public static string CultureCookieName + { + get { return PortalConfiguration.SiteSettings["CultureCookieName"]; } + } - public static string ThemeCookieName - { - get { return PortalConfiguration.SiteSettings["ThemeCookieName"]; } - } + public static string ThemeCookieName + { + get { return PortalConfiguration.SiteSettings["ThemeCookieName"]; } + } - public static System.Globalization.CultureInfo CurrentCulture - { - get { return GetCurrentCulture(); } - } + public static System.Globalization.CultureInfo CurrentCulture + { + get { return GetCurrentCulture(); } + } - public static System.Globalization.CultureInfo CurrentUICulture - { - get { return GetCurrentCulture(); } - } + public static System.Globalization.CultureInfo CurrentUICulture + { + get { return GetCurrentCulture(); } + } - public static string CurrentTheme - { - get { return GetCurrentTheme(); } - } + public static string CurrentTheme + { + get { return GetCurrentTheme(); } + } internal static string GetCurrentTheme() { @@ -131,51 +131,51 @@ namespace WebsitePanel.Portal return String.IsNullOrEmpty(theme) ? "Default" : theme; } - public static void SetCurrentTheme(string theme) - { - // theme - if (!String.IsNullOrEmpty(theme)) - { - HttpCookie cookieTheme = new HttpCookie(ThemeCookieName, theme); - cookieTheme.Expires = DateTime.Now.AddMonths(2); - HttpContext.Current.Response.Cookies.Add(cookieTheme); - } - } + public static void SetCurrentTheme(string theme) + { + // theme + if (!String.IsNullOrEmpty(theme)) + { + HttpCookie cookieTheme = new HttpCookie(ThemeCookieName, theme); + cookieTheme.Expires = DateTime.Now.AddMonths(2); + HttpContext.Current.Response.Cookies.Add(cookieTheme); + } + } - internal static System.Globalization.CultureInfo GetCurrentCulture() - { - System.Globalization.CultureInfo ci = (System.Globalization.CultureInfo) - HttpContext.Current.Items[CultureCookieName]; + internal static System.Globalization.CultureInfo GetCurrentCulture() + { + System.Globalization.CultureInfo ci = (System.Globalization.CultureInfo) + HttpContext.Current.Items[CultureCookieName]; - if (ci == null) - { - HttpCookie localeCrumb = HttpContext.Current.Request.Cookies[CultureCookieName]; - if (localeCrumb != null) - { - ci = System.Globalization.CultureInfo.CreateSpecificCulture(localeCrumb.Value); + if (ci == null) + { + HttpCookie localeCrumb = HttpContext.Current.Request.Cookies[CultureCookieName]; + if (localeCrumb != null) + { + ci = System.Globalization.CultureInfo.CreateSpecificCulture(localeCrumb.Value); - if (ci != null) - { - HttpContext.Current.Items[CultureCookieName] = ci; - return ci; - } - } - } - else - return ci; + if (ci != null) + { + HttpContext.Current.Items[CultureCookieName] = ci; + return ci; + } + } + } + else + return ci; - return System.Threading.Thread.CurrentThread.CurrentCulture; - } + return System.Threading.Thread.CurrentThread.CurrentCulture; + } - public static string AdminEmail - { - get { return PortalConfiguration.SiteSettings["AdminEmail"]; } - } + public static string AdminEmail + { + get { return PortalConfiguration.SiteSettings["AdminEmail"]; } + } - public static string FromEmail - { - get { return PortalConfiguration.SiteSettings["FromEmail"]; } - } + public static string FromEmail + { + get { return PortalConfiguration.SiteSettings["FromEmail"]; } + } public static void SendMail(string from, string to, string bcc, string subject, string body) { @@ -214,87 +214,87 @@ namespace WebsitePanel.Portal } } - public static void UserSignOut() - { - FormsAuthentication.SignOut(); + public static void UserSignOut() + { + FormsAuthentication.SignOut(); HttpContext.Current.Response.Redirect(LoginRedirectUrl); - } + } - public static MenuItem GetSpaceMenuItem(string menuItemKey) - { - MenuItem item = new MenuItem(); - item.Value = menuItemKey; + public static MenuItem GetSpaceMenuItem(string menuItemKey) + { + MenuItem item = new MenuItem(); + item.Value = menuItemKey; - menuItemKey = String.Concat("Space", menuItemKey); + menuItemKey = String.Concat("Space", menuItemKey); - PortalPage page = PortalConfiguration.Site.Pages[menuItemKey]; + PortalPage page = PortalConfiguration.Site.Pages[menuItemKey]; - if (page != null) + if (page != null) item.NavigateUrl = DefaultPage.GetPageUrl(menuItemKey); - return item; - } + return item; + } - private static FormsAuthenticationTicket AuthTicket - { - get - { - FormsAuthenticationTicket authTicket = (FormsAuthenticationTicket)HttpContext.Current.Items[FormsAuthentication.FormsCookieName]; + private static FormsAuthenticationTicket AuthTicket + { + get + { + FormsAuthenticationTicket authTicket = (FormsAuthenticationTicket)HttpContext.Current.Items[FormsAuthentication.FormsCookieName]; - if (authTicket == null) - { - // original code - HttpCookie authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName]; - // workaround for cases when AuthTicket is required before round-trip - if (authCookie == null || String.IsNullOrEmpty(authCookie.Value)) - authCookie = HttpContext.Current.Response.Cookies[FormsAuthentication.FormsCookieName]; - // - if (authCookie != null) - { - authTicket = FormsAuthentication.Decrypt(authCookie.Value); - HttpContext.Current.Items[FormsAuthentication.FormsCookieName] = authTicket; - } - } + if (authTicket == null) + { + // original code + HttpCookie authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName]; + // workaround for cases when AuthTicket is required before round-trip + if (authCookie == null || String.IsNullOrEmpty(authCookie.Value)) + authCookie = HttpContext.Current.Response.Cookies[FormsAuthentication.FormsCookieName]; + // + if (authCookie != null) + { + authTicket = FormsAuthentication.Decrypt(authCookie.Value); + HttpContext.Current.Items[FormsAuthentication.FormsCookieName] = authTicket; + } + } - return authTicket; - } - } + return authTicket; + } + } - private static void SetAuthTicket(FormsAuthenticationTicket ticket, bool persistent) - { - // issue authentication cookie - HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName); - authCookie.Domain = FormsAuthentication.CookieDomain; - authCookie.Secure = FormsAuthentication.RequireSSL; - authCookie.Path = FormsAuthentication.FormsCookiePath; - authCookie.Value = FormsAuthentication.Encrypt(ticket); + private static void SetAuthTicket(FormsAuthenticationTicket ticket, bool persistent) + { + // issue authentication cookie + HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName); + authCookie.Domain = FormsAuthentication.CookieDomain; + authCookie.Secure = FormsAuthentication.RequireSSL; + authCookie.Path = FormsAuthentication.FormsCookiePath; + authCookie.Value = FormsAuthentication.Encrypt(ticket); - if (persistent) - authCookie.Expires = DateTime.Now.AddMonths(1); + if (persistent) + authCookie.Expires = DateTime.Now.AddMonths(1); - HttpContext.Current.Response.Cookies.Add(authCookie); - } + HttpContext.Current.Response.Cookies.Add(authCookie); + } - public static string ApplicationPath - { - get - { - if (HttpContext.Current.Request.ApplicationPath == "/") - return ""; - else - return HttpContext.Current.Request.ApplicationPath; - } - } + public static string ApplicationPath + { + get + { + if (HttpContext.Current.Request.ApplicationPath == "/") + return ""; + else + return HttpContext.Current.Request.ApplicationPath; + } + } - public static string GetSharedLocalizedString(string moduleName, string resourceKey) - { - string className = SharedResourcesFile.Replace(".resx", ""); + public static string GetSharedLocalizedString(string moduleName, string resourceKey) + { + string className = SharedResourcesFile.Replace(".resx", ""); - if (!String.IsNullOrEmpty(moduleName)) - className = String.Concat(moduleName, "_", className); - - return (string)HttpContext.GetGlobalResourceObject(className, resourceKey); - } + if (!String.IsNullOrEmpty(moduleName)) + className = String.Concat(moduleName, "_", className); + + return (string)HttpContext.GetGlobalResourceObject(className, resourceKey); + } public static string GetCurrentPageId() { @@ -311,40 +311,40 @@ namespace WebsitePanel.Portal return DefaultPage.GetLocalizedPageName(pageId); } - public static int AuthenticateUser(string username, string password, string ipAddress, - bool rememberLogin, string preferredLocale, string theme) - { - esAuthentication authService = new esAuthentication(); - ConfigureEnterpriseServerProxy(authService, false); + public static int AuthenticateUser(string username, string password, string ipAddress, + bool rememberLogin, string preferredLocale, string theme) + { + esAuthentication authService = new esAuthentication(); + ConfigureEnterpriseServerProxy(authService, false); - try - { - int authResult = authService.AuthenticateUser(username, password, ipAddress); + try + { + int authResult = authService.AuthenticateUser(username, password, ipAddress); - if (authResult < 0) - { - return authResult; - } - else - { - UserInfo user = authService.GetUserByUsernamePassword(username, password, ipAddress); - if (user != null) - { - // issue authentication ticket - FormsAuthenticationTicket ticket = CreateAuthTicket(user.Username, user.Password, user.Role, rememberLogin); - SetAuthTicket(ticket, rememberLogin); + if (authResult < 0) + { + return authResult; + } + else + { + UserInfo user = authService.GetUserByUsernamePassword(username, password, ipAddress); + if (user != null) + { + // issue authentication ticket + FormsAuthenticationTicket ticket = CreateAuthTicket(user.Username, user.Password, user.Role, rememberLogin); + SetAuthTicket(ticket, rememberLogin); - CompleteUserLogin(username, rememberLogin, preferredLocale, theme); - } + CompleteUserLogin(username, rememberLogin, preferredLocale, theme); + } - return 0; - } - } - catch (Exception ex) - { - throw ex; - } - } + return 0; + } + } + catch (Exception ex) + { + throw ex; + } + } private static int GetAuthenticationFormsTimeout() { @@ -381,18 +381,18 @@ namespace WebsitePanel.Portal ); } - public static int ChangeUserPassword(int userId, string newPassword) - { - // load user account - esUsers usersService = new esUsers(); - ConfigureEnterpriseServerProxy(usersService, true); + public static int ChangeUserPassword(int userId, string newPassword) + { + // load user account + esUsers usersService = new esUsers(); + ConfigureEnterpriseServerProxy(usersService, true); try - { - UserInfo user = usersService.GetUserById(userId); + { + UserInfo user = usersService.GetUserById(userId); - // change WebsitePanel account password - int result = usersService.ChangeUserPassword(userId, newPassword); + // change WebsitePanel account password + int result = usersService.ChangeUserPassword(userId, newPassword); if (result < 0) return result; @@ -400,15 +400,15 @@ namespace WebsitePanel.Portal if (String.Compare(user.Username, AuthTicket.Name, true) == 0) { FormsAuthenticationTicket ticket = CreateAuthTicket(user.Username, newPassword, user.Role, AuthTicket.IsPersistent); - SetAuthTicket(ticket, AuthTicket.IsPersistent); + SetAuthTicket(ticket, AuthTicket.IsPersistent); } return result; - } - catch (Exception ex) - { - throw ex; - } - } + } + catch (Exception ex) + { + throw ex; + } + } public static int UpdateUserAccount(UserInfo user) { @@ -416,138 +416,138 @@ namespace WebsitePanel.Portal } public static int UpdateUserAccount(string taskId, UserInfo user) - { - esUsers usersService = new esUsers(); - ConfigureEnterpriseServerProxy(usersService, true); + { + esUsers usersService = new esUsers(); + ConfigureEnterpriseServerProxy(usersService, true); - try - { - // update user in WebsitePanel - return usersService.UpdateUserTask(taskId, user); - } - catch (Exception ex) - { - throw ex; - } - } + try + { + // update user in WebsitePanel + return usersService.UpdateUserTask(taskId, user); + } + catch (Exception ex) + { + throw ex; + } + } - public static int AddUserAccount(List log, UserInfo user, bool sendLetter) - { - esUsers usersService = new esUsers(); - ConfigureEnterpriseServerProxy(usersService, true); + public static int AddUserAccount(List log, UserInfo user, bool sendLetter) + { + esUsers usersService = new esUsers(); + ConfigureEnterpriseServerProxy(usersService, true); - try - { - // add user to WebsitePanel server + try + { + // add user to WebsitePanel server return usersService.AddUser(user, sendLetter); - } - catch (Exception ex) - { - throw ex; - } - } + } + catch (Exception ex) + { + throw ex; + } + } - public static int DeleteUserAccount(int userId) - { - esUsers usersService = new esUsers(); - ConfigureEnterpriseServerProxy(usersService, true); + public static int DeleteUserAccount(int userId) + { + esUsers usersService = new esUsers(); + ConfigureEnterpriseServerProxy(usersService, true); - try - { - // add user to WebsitePanel server - return usersService.DeleteUser(userId); - } - catch (Exception ex) - { - throw ex; - } - } + try + { + // add user to WebsitePanel server + return usersService.DeleteUser(userId); + } + catch (Exception ex) + { + throw ex; + } + } - public static int ChangeUserStatus(int userId, UserStatus status) - { - esUsers usersService = new esUsers(); - ConfigureEnterpriseServerProxy(usersService, true); + public static int ChangeUserStatus(int userId, UserStatus status) + { + esUsers usersService = new esUsers(); + ConfigureEnterpriseServerProxy(usersService, true); - try - { - // add user to WebsitePanel server - return usersService.ChangeUserStatus(userId, status); - } - catch (Exception ex) - { - throw ex; - } - } + try + { + // add user to WebsitePanel server + return usersService.ChangeUserStatus(userId, status); + } + catch (Exception ex) + { + throw ex; + } + } - public static UserInfo GetCurrentUser() - { - UserInfo user = null; + public static UserInfo GetCurrentUser() + { + UserInfo user = null; - if (AuthTicket != null) - { - esUsers usersService = new esUsers(); - ConfigureEnterpriseServerProxy(usersService); + if (AuthTicket != null) + { + esUsers usersService = new esUsers(); + ConfigureEnterpriseServerProxy(usersService); - user = usersService.GetUserByUsername(AuthTicket.Name); - } + user = usersService.GetUserByUsername(AuthTicket.Name); + } - return user; - } + return user; + } - private static void CompleteUserLogin(string username, bool rememberLogin, - string preferredLocale, string theme) - { - // store last successful username in the cookie - HttpCookie cookie = new HttpCookie("WebsitePanelLogin", username); - cookie.Expires = DateTime.Now.AddDays(7); - HttpContext.Current.Response.Cookies.Add(cookie); + private static void CompleteUserLogin(string username, bool rememberLogin, + string preferredLocale, string theme) + { + // store last successful username in the cookie + HttpCookie cookie = new HttpCookie("WebsitePanelLogin", username); + cookie.Expires = DateTime.Now.AddDays(7); + HttpContext.Current.Response.Cookies.Add(cookie); - // set language - SetCurrentLanguage(preferredLocale); + // set language + SetCurrentLanguage(preferredLocale); - // set theme - SetCurrentTheme(theme); + // set theme + SetCurrentTheme(theme); - // remember me - if (rememberLogin) - HttpContext.Current.Response.Cookies[FormsAuthentication.FormsCookieName].Expires = DateTime.Now.AddMonths(1); - } + // remember me + if (rememberLogin) + HttpContext.Current.Response.Cookies[FormsAuthentication.FormsCookieName].Expires = DateTime.Now.AddMonths(1); + } - public static void SetCurrentLanguage(string preferredLocale) - { - if (!String.IsNullOrEmpty(preferredLocale)) - { - HttpCookie localeCrumb = new HttpCookie(CultureCookieName, preferredLocale); - localeCrumb.Expires = DateTime.Now.AddMonths(2); - HttpContext.Current.Response.Cookies.Add(localeCrumb); - } - } + public static void SetCurrentLanguage(string preferredLocale) + { + if (!String.IsNullOrEmpty(preferredLocale)) + { + HttpCookie localeCrumb = new HttpCookie(CultureCookieName, preferredLocale); + localeCrumb.Expires = DateTime.Now.AddMonths(2); + HttpContext.Current.Response.Cookies.Add(localeCrumb); + } + } - public static void ConfigureEnterpriseServerProxy(WebServicesClientProtocol proxy) - { - ConfigureEnterpriseServerProxy(proxy, true); - } + public static void ConfigureEnterpriseServerProxy(WebServicesClientProtocol proxy) + { + ConfigureEnterpriseServerProxy(proxy, true); + } - public static void ConfigureEnterpriseServerProxy(WebServicesClientProtocol proxy, bool applyPolicy) - { - // load ES properties - string serverUrl = PortalConfiguration.SiteSettings["EnterpriseServer"]; + public static void ConfigureEnterpriseServerProxy(WebServicesClientProtocol proxy, bool applyPolicy) + { + // load ES properties + string serverUrl = PortalConfiguration.SiteSettings["EnterpriseServer"]; - EnterpriseServerProxyConfigurator cnfg = new EnterpriseServerProxyConfigurator(); - cnfg.EnterpriseServerUrl = serverUrl; + EnterpriseServerProxyConfigurator cnfg = new EnterpriseServerProxyConfigurator(); + cnfg.EnterpriseServerUrl = serverUrl; - // create assertion - if (applyPolicy) - { - if (AuthTicket != null) - { - cnfg.Username = AuthTicket.Name; - cnfg.Password = AuthTicket.UserData.Substring(0, AuthTicket.UserData.IndexOf(Environment.NewLine)); - } - } + // create assertion + if (applyPolicy) + { + if (AuthTicket != null) + { + cnfg.Username = AuthTicket.Name; + cnfg.Password = AuthTicket.UserData.Substring(0, AuthTicket.UserData.IndexOf(Environment.NewLine)); + } + } - cnfg.Configure(proxy); - } + cnfg.Configure(proxy); + } public static XmlNode GetModuleContentNode(WebPortalControlBase module) { @@ -560,15 +560,15 @@ namespace WebsitePanel.Portal return module.Module.SelectNodes("MenuItem"); } - public static string FormatIconImageUrl(string url) - { - return url; - } + public static string FormatIconImageUrl(string url) + { + return url; + } - public static string FormatIconLinkUrl(object url) - { - return DefaultPage.GetPageUrl(url.ToString()); - } + public static string FormatIconLinkUrl(object url) + { + return DefaultPage.GetPageUrl(url.ToString()); + } public static string GetThemedImage(string imageUrl) { @@ -582,76 +582,76 @@ namespace WebsitePanel.Portal return page.ResolveUrl("~/App_Themes/" + page.Theme + "/" + iconUrl); } - public static void LoadStatesDropDownList(DropDownList list, string countryCode) - { + public static void LoadStatesDropDownList(DropDownList list, string countryCode) + { string xmlFilePath = HttpContext.Current.Server.MapPath(CONFIG_FOLDER + "CountryStates.config"); - list.Items.Clear(); - if (File.Exists(xmlFilePath)) - { - try - { - XmlDocument xmlDoc = new XmlDocument(); - xmlDoc.Load(xmlFilePath); + list.Items.Clear(); + if (File.Exists(xmlFilePath)) + { + try + { + XmlDocument xmlDoc = new XmlDocument(); + xmlDoc.Load(xmlFilePath); - List items = new List(); + List items = new List(); - XmlNodeList xmlNodes = xmlDoc.SelectNodes("//State[@countryCode='" + countryCode + "']"); - foreach (XmlElement xmlNode in xmlNodes) - { - string nodeName = xmlNode.GetAttribute("name"); - string nodeKey = xmlNode.GetAttribute("key"); + XmlNodeList xmlNodes = xmlDoc.SelectNodes("//State[@countryCode='" + countryCode + "']"); + foreach (XmlElement xmlNode in xmlNodes) + { + string nodeName = xmlNode.GetAttribute("name"); + string nodeKey = xmlNode.GetAttribute("key"); - items.Add(new ListItem(nodeName, nodeKey)); - } + items.Add(new ListItem(nodeName, nodeKey)); + } - list.Items.AddRange(items.ToArray()); - } - catch - { - } - } - } + list.Items.AddRange(items.ToArray()); + } + catch + { + } + } + } - public static void LoadCountriesDropDownList(DropDownList list, string countryToSelect) - { + public static void LoadCountriesDropDownList(DropDownList list, string countryToSelect) + { string countriesPath = HttpContext.Current.Server.MapPath(CONFIG_FOLDER + "Countries.config"); - - if (File.Exists(countriesPath)) - { - try - { - XmlDocument xmlCountriesDoc = new XmlDocument(); - xmlCountriesDoc.Load(countriesPath); + + if (File.Exists(countriesPath)) + { + try + { + XmlDocument xmlCountriesDoc = new XmlDocument(); + xmlCountriesDoc.Load(countriesPath); - List items = new List(); + List items = new List(); - XmlNodeList xmlCountries = xmlCountriesDoc.SelectNodes("//Country"); - foreach (XmlElement xmlCountry in xmlCountries) - { - string countryName = xmlCountry.GetAttribute("name"); - string countryKey = xmlCountry.GetAttribute("key"); + XmlNodeList xmlCountries = xmlCountriesDoc.SelectNodes("//Country"); + foreach (XmlElement xmlCountry in xmlCountries) + { + string countryName = xmlCountry.GetAttribute("name"); + string countryKey = xmlCountry.GetAttribute("key"); - if (String.Compare(countryKey, countryToSelect) == 0) - { - ListItem li = new ListItem(countryName, countryKey); - li.Selected = true; - items.Add(li); - } - else - items.Add(new ListItem(countryName, countryKey)); - } + if (String.Compare(countryKey, countryToSelect) == 0) + { + ListItem li = new ListItem(countryName, countryKey); + li.Selected = true; + items.Add(li); + } + else + items.Add(new ListItem(countryName, countryKey)); + } - list.Items.AddRange(items.ToArray()); - } - catch - { - } - } - } + list.Items.AddRange(items.ToArray()); + } + catch + { + } + } + } - public static void LoadCultureDropDownList(DropDownList list) - { + public static void LoadCultureDropDownList(DropDownList list) + { string localesPath = HttpContext.Current.Server.MapPath(CONFIG_FOLDER + "SupportedLocales.config"); if (File.Exists(localesPath)) @@ -696,39 +696,39 @@ namespace WebsitePanel.Portal { } } - } + } - public static void LoadThemesDropDownList(DropDownList list) - { - string localesPath = HttpContext.Current.Server.MapPath(CONFIG_FOLDER + "SupportedThemes.config"); + public static void LoadThemesDropDownList(DropDownList list) + { + string localesPath = HttpContext.Current.Server.MapPath(CONFIG_FOLDER + "SupportedThemes.config"); - if (File.Exists(localesPath)) - { - string themeToSelect = CurrentTheme; + if (File.Exists(localesPath)) + { + string themeToSelect = CurrentTheme; - try - { - XmlDocument doc = new XmlDocument(); - doc.Load(localesPath); + try + { + XmlDocument doc = new XmlDocument(); + doc.Load(localesPath); - XmlNodeList xmlThemes = doc.SelectNodes("//Theme"); - for (int i = 0; i < xmlThemes.Count; i++) - { - XmlElement xmlTheme = (XmlElement)xmlThemes[i]; - string themeName = xmlTheme.GetAttribute("name"); - string themeTitle = xmlTheme.GetAttribute("title"); + XmlNodeList xmlThemes = doc.SelectNodes("//Theme"); + for (int i = 0; i < xmlThemes.Count; i++) + { + XmlElement xmlTheme = (XmlElement)xmlThemes[i]; + string themeName = xmlTheme.GetAttribute("name"); + string themeTitle = xmlTheme.GetAttribute("title"); - list.Items.Add(new ListItem(themeTitle, themeName)); + list.Items.Add(new ListItem(themeTitle, themeName)); - if (String.Compare(themeName, themeToSelect) == 0) - list.Items[i].Selected = true; - } - } - catch - { - } - } - } + if (String.Compare(themeName, themeToSelect) == 0) + list.Items[i].Selected = true; + } + } + catch + { + } + } + } #region Navigation Routines public static string LoginRedirectUrl @@ -805,23 +805,23 @@ namespace WebsitePanel.Portal urlBuilder.Add(String.Concat(keyName, "=", keyValue)); // load additional params - if (additionalParams != null) - { + if (additionalParams != null) + { string controlId = null; string moduleDefinitionId = null; // - foreach (string paramStr in additionalParams) - { - if (paramStr.StartsWith("ctl=", StringComparison.InvariantCultureIgnoreCase)) - { - // ensure page exists and avoid unnecessary exceptions throw - if (PortalConfiguration.Site.Pages.ContainsKey(pageId)) - { - string[] pair = paramStr.Split('='); + foreach (string paramStr in additionalParams) + { + if (paramStr.StartsWith("ctl=", StringComparison.InvariantCultureIgnoreCase)) + { + // ensure page exists and avoid unnecessary exceptions throw + if (PortalConfiguration.Site.Pages.ContainsKey(pageId)) + { + string[] pair = paramStr.Split('='); controlId = pair[1]; } - } + } else if (paramStr.StartsWith("moduleDefId=", StringComparison.InvariantCultureIgnoreCase)) { // ensure page exists and avoid unnecessary exceptions throw @@ -832,8 +832,8 @@ namespace WebsitePanel.Portal } continue; } - urlBuilder.Add(paramStr); - } + urlBuilder.Add(paramStr); + } if (!String.IsNullOrEmpty(moduleDefinitionId) && !String.IsNullOrEmpty(controlId)) { // 1. Read module controls first information first @@ -864,7 +864,7 @@ namespace WebsitePanel.Portal } } } - } + } End: if (urlBuilder.Count > 0) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesHeliconApeControl.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesHeliconApeControl.ascx.cs index 1a1ff8e5..b3381dc8 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesHeliconApeControl.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/WebSitesHeliconApeControl.ascx.cs @@ -66,44 +66,47 @@ namespace WebsitePanel.Portal { if (IsHeliconApeInstalled) { - WebSite site = null; - try + if (!IsPostBack) { - site = ES.Services.WebServers.GetWebSite(PanelRequest.ItemID); - } - catch (Exception ex) - { - HostModule.ShowErrorMessage("WEB_GET_SITE", ex); - return; - } + WebSite site = null; + try + { + site = ES.Services.WebServers.GetWebSite(PanelRequest.ItemID); + } + catch (Exception ex) + { + HostModule.ShowErrorMessage("WEB_GET_SITE", ex); + return; + } - if (site == null) - RedirectToBrowsePage(); + if (site == null) + RedirectToBrowsePage(); - BindHeliconApe(site); + BindHeliconApe(site); + } } } - public void BindHeliconApe(WebSite site) + public void BindHeliconApe(WebSite site) { // save initial state IsHeliconApeInstalled = site.HeliconApeInstalled; IsHeliconApeEnabled = site.HeliconApeEnabled; IsSecuredFoldersInstalled = site.SecuredFoldersInstalled; - // Render a warning message about the automatic site's settings change - if (!IsHeliconApeEnabled && site.IIs7) - { - // Ensure the message is displayed only when neccessary - if (site.EnableWindowsAuthentication || !site.AspNetInstalled.EndsWith("I") || site.SecuredFoldersInstalled) - { - // TODO: show warning, do not force to enable integrated pool + // Render a warning message about the automatic site's settings change + if (!IsHeliconApeEnabled && site.IIs7) + { + // Ensure the message is displayed only when neccessary + if (site.EnableWindowsAuthentication || !site.AspNetInstalled.EndsWith("I") || site.SecuredFoldersInstalled) + { + // TODO: show warning, do not force to enable integrated pool string warningStr = GetLocalizedString("EnableFoldersIIs7Warning.Text"); - // Render a warning only if specified - if (!String.IsNullOrEmpty(warningStr)) + // Render a warning only if specified + if (!String.IsNullOrEmpty(warningStr)) btnToggleHeliconApe.OnClientClick = String.Format("return confirm('{0}')", warningStr); - } - } + } + } // toggle ToggleControls(); } @@ -112,7 +115,7 @@ namespace WebsitePanel.Portal { if (IsHeliconApeInstalled) { - // toggle button + // toggle button btnToggleHeliconApe.Text = GetLocalizedString( IsHeliconApeEnabled ? "DisableHeliconApe.Text" : "EnableHeliconApe.Text"); @@ -130,9 +133,9 @@ namespace WebsitePanel.Portal } else { - // Display the module not installed message for informational purposes. - panelHeliconApeIsNotInstalledMessage.Visible = true; - // + // Display the module not installed message for informational purposes. + panelHeliconApeIsNotInstalledMessage.Visible = true; + // btnToggleHeliconApe.Visible = false; HeliconApeFoldersPanel.Visible = false; } From 8b7b150da7a4f288c5112a116e9e26815fd8621a Mon Sep 17 00:00:00 2001 From: ptsurbeleu Date: Fri, 10 Feb 2012 00:01:39 -0800 Subject: [PATCH 13/38] Fixed some perf concerns related to types conversion; Replaced tabs with spaces; --- .../WebsitePanel/Code/Framework/Utils.cs | 127 ++++++++++++------ 1 file changed, 84 insertions(+), 43 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Code/Framework/Utils.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Code/Framework/Utils.cs index 2270d1b1..17abd1ae 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Code/Framework/Utils.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/Code/Framework/Utils.cs @@ -47,7 +47,7 @@ namespace WebsitePanel.Portal /// - /// Builds list of items from supplied group string. - /// - /// Group string. - /// List of items. - public static List> ParseGroup(string group) - { - List> items = new List>(); - string[] vals = group.Split(';'); - foreach (string v in vals) - { - string itemValue = v; - string itemText = v; + ///

+ /// Builds list of items from supplied group string. + /// + /// Group string. + /// List of items. + public static List> ParseGroup(string group) + { + List> items = new List>(); + string[] vals = group.Split(';'); + foreach (string v in vals) + { + string itemValue = v; + string itemText = v; - int eqIdx = v.IndexOf("="); - if (eqIdx != -1) - { - itemValue = v.Substring(0, eqIdx); - itemText = v.Substring(eqIdx + 1); - } + int eqIdx = v.IndexOf("="); + if (eqIdx != -1) + { + itemValue = v.Substring(0, eqIdx); + itemText = v.Substring(eqIdx + 1); + } - items.Add(new KeyValuePair(itemText, itemValue)); - } - return items; - } + items.Add(new KeyValuePair(itemText, itemValue)); + } + return items; + } public static void SelectListItem(ListControl ctrl, object value) @@ -215,13 +256,13 @@ namespace WebsitePanel.Portal } } - public static string EllipsisString(string str, int maxLen) - { - if (String.IsNullOrEmpty(str) || str.Length <= maxLen) - return str; + public static string EllipsisString(string str, int maxLen) + { + if (String.IsNullOrEmpty(str) || str.Length <= maxLen) + return str; - return str.Substring(0, maxLen) + "..."; - } + return str.Substring(0, maxLen) + "..."; + } public static string GetRandomString(int length) { From 2dc3ced5cf3b3901068e905de21f798bc667feb5 Mon Sep 17 00:00:00 2001 From: ptsurbeleu Date: Tue, 14 Feb 2012 23:15:45 -0800 Subject: [PATCH 14/38] Added bit.ly support for distiributives download; Updated year in copyright text; --- .../Sources/Setup/Setup.vdproj | 55 +- WebsitePanel.Installer/Sources/VersionInfo.cs | 10 +- .../Common/FileUtils.cs | 425 +++++----- .../Common/Utils.cs | 21 +- .../WebsitePanel.Installer.Core/Loader.cs | 791 ++++++++++-------- .../ServiceComponentNotFoundException.cs | 17 + .../WebsitePanel.Installer.Core.csproj | 2 + .../Controls/ComponentControl.cs | 16 +- .../Controls/ComponentsControl.cs | 504 +++++------ .../WebsitePanel.Installer/Controls/Loader.cs | 240 +++--- .../WebsitePanel.Installer/Updater.exe | Bin 199168 -> 199168 bytes .../Wizard/ExpressInstallPage.cs | 84 +- 12 files changed, 1210 insertions(+), 955 deletions(-) create mode 100644 WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/ServiceComponentNotFoundException.cs diff --git a/WebsitePanel.Installer/Sources/Setup/Setup.vdproj b/WebsitePanel.Installer/Sources/Setup/Setup.vdproj index b8775a0e..836c2919 100644 --- a/WebsitePanel.Installer/Sources/Setup/Setup.vdproj +++ b/WebsitePanel.Installer/Sources/Setup/Setup.vdproj @@ -63,6 +63,24 @@ } "Entry" { + "MsmKey" = "8:_5FD334A6C47943FA9A98232EA921C90B" + "OwnerKey" = "8:_05F59A142DD147798C90054A203C0EE9" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5FD334A6C47943FA9A98232EA921C90B" + "OwnerKey" = "8:_1239E87E938248B1BAF9BF75C32D3EDC" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5FD334A6C47943FA9A98232EA921C90B" + "OwnerKey" = "8:_CFB0AE8275767700870555C8CDA92C96" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_BD9DC4338DFD4472BE5D099C388608B6" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -294,6 +312,37 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_5FD334A6C47943FA9A98232EA921C90B" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Ionic.Zip.Reduced, Version=1.8.4.28, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_5FD334A6C47943FA9A98232EA921C90B" + { + "Name" = "8:Ionic.Zip.Reduced.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Ionic.Zip.Reduced.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_E742E59BFE4D43C59AA65A07792B89FB" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BD9DC4338DFD4472BE5D099C388608B6" { "SourcePath" = "8:Banner.bmp" @@ -407,15 +456,15 @@ { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:WebsitePanel Installer" - "ProductCode" = "8:{09BCDF68-1964-4FC6-9570-9AB3B8512CF6}" - "PackageCode" = "8:{D94FF2E6-1D7D-4E33-8528-C7B6BFADEC99}" + "ProductCode" = "8:{A22F374C-4AFC-4B5D-A509-7456A6107588}" + "PackageCode" = "8:{401F157D-6D55-4F66-A2C6-419F87BBF97D}" "UpgradeCode" = "8:{2950A907-11E7-436C-86CE-049C414AFD08}" "AspNetVersion" = "8:4.0.30319.0" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:FALSE" "DetectNewerInstalledVersion" = "11:FALSE" "InstallAllUsers" = "11:TRUE" - "ProductVersion" = "8:1.2.0" + "ProductVersion" = "8:1.2.1" "Manufacturer" = "8:Outercurve Foundation" "ARPHELPTELEPHONE" = "8:" "ARPHELPLINK" = "8:" diff --git a/WebsitePanel.Installer/Sources/VersionInfo.cs b/WebsitePanel.Installer/Sources/VersionInfo.cs index d03067e7..f939546f 100644 --- a/WebsitePanel.Installer/Sources/VersionInfo.cs +++ b/WebsitePanel.Installer/Sources/VersionInfo.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, @@ -35,7 +35,7 @@ using System.Reflection; // Revision // [assembly: AssemblyCompany("Outercurve Foundation")] -[assembly: AssemblyCopyright("Copyright © 2011 Outercurve Foundation.")] -[assembly: AssemblyVersion("1.2.0.0")] -[assembly: AssemblyFileVersion("1.2.0.38")] -[assembly: AssemblyInformationalVersion("1.2.0")] \ No newline at end of file +[assembly: AssemblyCopyright("Copyright © 2012 Outercurve Foundation.")] +[assembly: AssemblyVersion("1.2.1.0")] +[assembly: AssemblyFileVersion("1.2.1.0")] +[assembly: AssemblyInformationalVersion("1.2.1")] \ No newline at end of file diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/FileUtils.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/FileUtils.cs index 7ca351b9..fb93c644 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/FileUtils.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/FileUtils.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, @@ -34,43 +34,43 @@ using System.IO; namespace WebsitePanel.Installer.Common { - /// - /// File utils. - /// - public sealed class FileUtils - { - /// - /// Initializes a new instance of the class. - /// - private FileUtils() - { - } + /// + /// File utils. + /// + public sealed class FileUtils + { + /// + /// Initializes a new instance of the class. + /// + private FileUtils() + { + } - /// - /// Creates drectory with the specified directory. - /// - /// The directory path to create. - public static void CreateDirectory(string path) - { - string dir = Path.GetDirectoryName(path); - if(!Directory.Exists(dir)) - { - // create directory structure - Directory.CreateDirectory(dir); - } - } + /// + /// Creates drectory with the specified directory. + /// + /// The directory path to create. + public static void CreateDirectory(string path) + { + string dir = Path.GetDirectoryName(path); + if(!Directory.Exists(dir)) + { + // create directory structure + Directory.CreateDirectory(dir); + } + } - /// - /// Saves file content. - /// - /// File name. - /// The array of bytes to write. - public static void SaveFileContent(string fileName, byte[] content) - { - FileStream stream = new FileStream(fileName, FileMode.Create); - stream.Write(content, 0, content.Length); - stream.Close(); - } + /// + /// Saves file content. + /// + /// File name. + /// The array of bytes to write. + public static void SaveFileContent(string fileName, byte[] content) + { + FileStream stream = new FileStream(fileName, FileMode.Create); + stream.Write(content, 0, content.Length); + stream.Close(); + } /// /// Saves file content. @@ -84,188 +84,203 @@ namespace WebsitePanel.Installer.Common stream.Close(); } - /// - /// Deletes the specified file. - /// - /// The name of the file to be deleted. - public static void DeleteFile(string fileName) - { - int attempts = 0; - while (true) - { - try - { - DeleteFileInternal(fileName); - break; - } - catch (Exception) - { - if (attempts > 2) - throw; + /// + /// Deletes the specified file. + /// + /// The name of the file to be deleted. + public static void DeleteFile(string fileName) + { + int attempts = 0; + while (true) + { + try + { + DeleteFileInternal(fileName); + break; + } + catch (Exception) + { + if (attempts > 2) + throw; - attempts++; - System.Threading.Thread.Sleep(1000); - } - } - } + attempts++; + System.Threading.Thread.Sleep(1000); + } + } + } - /// - /// Deletes the specified file. - /// - /// The name of the file to be deleted. - private static void DeleteReadOnlyFile(string fileName) - { - FileInfo info = new FileInfo(fileName); - info.Attributes = FileAttributes.Normal; - info.Delete(); - } + /// + /// Deletes the specified file. + /// + /// The name of the file to be deleted. + private static void DeleteReadOnlyFile(string fileName) + { + FileInfo info = new FileInfo(fileName); + info.Attributes = FileAttributes.Normal; + info.Delete(); + } - /// - /// Deletes the specified file. - /// - /// The name of the file to be deleted. - private static void DeleteFileInternal(string fileName) - { - try - { - File.Delete(fileName); - } - catch (UnauthorizedAccessException) - { - DeleteReadOnlyFile(fileName); - } - } + /// + /// Deletes the specified file. + /// + /// The name of the file to be deleted. + private static void DeleteFileInternal(string fileName) + { + try + { + File.Delete(fileName); + } + catch (UnauthorizedAccessException) + { + DeleteReadOnlyFile(fileName); + } + } - /// - /// Deletes the specified directory. - /// - /// The name of the directory to be deleted. - public static void DeleteDirectory(string directory) - { - if (!Directory.Exists(directory)) - return; + /// + /// Deletes the specified directory. + /// + /// The name of the directory to be deleted. + public static void DeleteDirectory(string directory) + { + if (!Directory.Exists(directory)) + return; - // iterate through child folders - string[] dirs = Directory.GetDirectories(directory); - foreach (string dir in dirs) - { - DeleteDirectory(dir); - } + // iterate through child folders + string[] dirs = Directory.GetDirectories(directory); + foreach (string dir in dirs) + { + DeleteDirectory(dir); + } - // iterate through child files - string[] files = Directory.GetFiles(directory); - foreach (string file in files) - { - DeleteFile(file); - } + // iterate through child files + string[] files = Directory.GetFiles(directory); + foreach (string file in files) + { + DeleteFile(file); + } - //try to delete dir for 3 times - int attempts = 0; - while (true) - { - try - { - DeleteDirectoryInternal(directory); - break; - } - catch (Exception) - { - if (attempts > 2) - throw; + //try to delete dir for 3 times + int attempts = 0; + while (true) + { + try + { + DeleteDirectoryInternal(directory); + break; + } + catch (Exception) + { + if (attempts > 2) + throw; - attempts++; - System.Threading.Thread.Sleep(1000); - } - } - } + attempts++; + System.Threading.Thread.Sleep(1000); + } + } + } - /// - /// Deletes the specified directory. - /// - /// The name of the directory to be deleted. - private static void DeleteDirectoryInternal(string directory) - { - try - { - Directory.Delete(directory); - } - catch (IOException) - { - DeleteReadOnlyDirectory(directory); - } - } + /// + /// Deletes the specified directory. + /// + /// The name of the directory to be deleted. + private static void DeleteDirectoryInternal(string directory) + { + try + { + Directory.Delete(directory); + } + catch (IOException) + { + DeleteReadOnlyDirectory(directory); + } + } - /// - /// Deletes the specified directory. - /// - /// The name of the directory to be deleted. - private static void DeleteReadOnlyDirectory(string directory) - { - DirectoryInfo info = new DirectoryInfo(directory); - info.Attributes = FileAttributes.Normal; - info.Delete(); - } + /// + /// Deletes the specified directory. + /// + /// The name of the directory to be deleted. + private static void DeleteReadOnlyDirectory(string directory) + { + DirectoryInfo info = new DirectoryInfo(directory); + info.Attributes = FileAttributes.Normal; + info.Delete(); + } - /// - /// Determines whether the specified file exists. - /// - /// The path to check. - /// - public static bool FileExists(string fileName) - { - return File.Exists(fileName); - } + /// + /// Determines whether the specified file exists. + /// + /// The path to check. + /// + public static bool FileExists(string fileName) + { + return File.Exists(fileName); + } - /// - /// Determines whether the given path refers to an existing directory on disk. - /// - /// The path to test. - /// - public static bool DirectoryExists(string path) - { - return Directory.Exists(path); - } - - /// - /// Returns current application path. - /// - /// Curent application path. - public static string GetCurrentDirectory() - { - return AppDomain.CurrentDomain.BaseDirectory; - } + /// + /// Determines whether the given path refers to an existing directory on disk. + /// + /// The path to test. + /// + public static bool DirectoryExists(string path) + { + return Directory.Exists(path); + } + + /// + /// Returns current application path. + /// + /// Curent application path. + public static string GetCurrentDirectory() + { + return AppDomain.CurrentDomain.BaseDirectory; + } - /// - /// Returns application temp directory. - /// - /// Application temp directory. - public static string GetTempDirectory() - { - return Path.Combine(GetCurrentDirectory(), "Tmp"); - } + /// + /// Returns application temp directory. + /// + /// Application temp directory. + public static string GetTempDirectory() + { + return Path.Combine(GetCurrentDirectory(), "Tmp"); + } - /// - /// Returns application data directory. - /// - /// Application data directory. - public static string GetDataDirectory() - { - return Path.Combine(GetCurrentDirectory(), "Data"); - } + /// + /// Returns application data directory. + /// + /// Application data directory. + public static string GetDataDirectory() + { + return Path.Combine(GetCurrentDirectory(), "Data"); + } - /// - /// Deletes application temp directory. - /// - public static void DeleteTempDirectory() - { - try - { - DeleteDirectory(GetTempDirectory()); - } - catch (Exception ex) - { - Log.WriteError("IO Error", ex); - } - } - } + /// + /// Deletes application's Data folder. + /// + public static void DeleteDataDirectory() + { + try + { + DeleteDirectory(GetDataDirectory()); + } + catch (Exception ex) + { + Log.WriteError("IO Error", ex); + } + } + + /// + /// Deletes application Tmp directory. + /// + public static void DeleteTempDirectory() + { + try + { + DeleteDirectory(GetTempDirectory()); + } + catch (Exception ex) + { + Log.WriteError("IO Error", ex); + } + } + } } diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/Utils.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/Utils.cs index 68b4cc31..cd036dd1 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/Utils.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/Utils.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, @@ -45,6 +45,7 @@ using System.Threading; using WebsitePanel.Installer.Core; using WebsitePanel.Installer.Configuration; using System.Xml; +using System.Data; namespace WebsitePanel.Installer.Common { @@ -389,5 +390,23 @@ namespace WebsitePanel.Installer.Common mutex = new Mutex(true, "WebsitePanel Installer", out createdNew); return createdNew; } + + public static string GetDistributiveLocationInfo(string ccode, string cversion) + { + var service = ServiceProviderProxy.GetInstallerWebService(); + // + DataSet ds = service.GetReleaseFileInfo(ccode, cversion); + // + if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0) + { + Log.WriteInfo("Component code: {0}; Component version: {1};", ccode, cversion); + // + throw new ServiceComponentNotFoundException("Seems that the Service has no idea about the component requested."); + } + // + DataRow row = ds.Tables[0].Rows[0]; + // + return row["FullFilePath"].ToString(); + } } } diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Loader.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Loader.cs index cc38ca29..39fe1861 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Loader.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Loader.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, @@ -36,380 +36,495 @@ using System.Text; using Ionic.Zip; using WebsitePanel.Installer.Common; +using System.Net; +using System.Text.RegularExpressions; +using System.Collections; +using System.Threading.Tasks; +using System.Reflection; +using System.Diagnostics; namespace WebsitePanel.Installer.Core { - public class LoaderEventArgs : EventArgs - { - public string StatusMessage { get; set; } - public T EventData { get; set; } - public bool Cancellable { get; set; } - } + public class LoaderEventArgs : EventArgs + { + public string StatusMessage { get; set; } + public T EventData { get; set; } + public bool Cancellable { get; set; } + } - /// - /// Loader form. - /// - public partial class Loader - { - public const string ConnectingRemotServiceMessage = "Connecting..."; - public const string DownloadingSetupFilesMessage = "Downloading setup files..."; - public const string CopyingSetupFilesMessage = "Copying setup files..."; - public const string PreparingSetupFilesMessage = "Please wait while Setup prepares the necessary files..."; - public const string DownloadProgressMessage = "{0} KB of {1} KB"; - public const string PrepareSetupProgressMessage = "{0}%"; + public static class LoaderFactory + { + /// + /// Instantiates either BitlyLoader or InstallerServiceLoader based on remote file format. + /// + /// + /// + public static Loader CreateFileLoader(string remoteFile) + { + Debug.Assert(!String.IsNullOrEmpty(remoteFile), "Remote file is empty"); - private const int ChunkSize = 262144; - private Thread thread; - private string localFile; - private string remoteFile; - private string componentCode; - private string version; + if (remoteFile.StartsWith("http://bit.ly/")) + { + return new BitlyLoader(remoteFile); + } + else + { + return new Loader(remoteFile); + } + } + } - public event EventHandler> StatusChanged; - public event EventHandler> OperationFailed; - public event EventHandler> ProgressChanged; - public event EventHandler OperationCompleted; + public class BitlyLoader : Loader + { + public const string WEB_PI_USER_AGENT_HEADER = "PI-Integrator/3.0.0.0({0})"; - public Loader(string remoteFile) - { - this.remoteFile = remoteFile; - } + private WebClient fileLoader; - public Loader(string localFile, string componentCode, string version) - { - this.localFile = localFile; - this.componentCode = componentCode; - this.version = version; - } + public BitlyLoader(string remoteFile) + : base(remoteFile) + { + InitFileLoader(); + } - public void LoadAppDistributive() - { - thread = new Thread(new ThreadStart(LoadAppDistributiveInternal)); - thread.Start(); - } + private void InitFileLoader() + { + fileLoader = new WebClient(); + // Set HTTP header for Codeplex to allow direct downloads + fileLoader.Headers.Add("User-Agent", String.Format(WEB_PI_USER_AGENT_HEADER, Assembly.GetExecutingAssembly().FullName)); + } - private void RaiseOnStatusChangedEvent(string statusMessage) - { - RaiseOnStatusChangedEvent(statusMessage, String.Empty); - } + protected override Task GetDownloadFileTask(string remoteFile, string tmpFile, CancellationToken ct) + { + var downloadFileTask = new Task(() => + { + if (!File.Exists(tmpFile)) + { + // Mimic synchronous file download operation because we need to track the download progress + // and be able to cancel the operation in progress + AutoResetEvent autoEvent = new AutoResetEvent(false); - private void RaiseOnStatusChangedEvent(string statusMessage, string eventData) - { - RaiseOnStatusChangedEvent(statusMessage, eventData, true); - } + if (fileLoader.IsBusy.Equals(true)) + { + return; + } - private void RaiseOnStatusChangedEvent(string statusMessage, string eventData, bool cancellable) - { - if (StatusChanged == null) - { - return; - } - // No event data for status updates - StatusChanged(this, new LoaderEventArgs { - StatusMessage = statusMessage, - EventData = eventData, - Cancellable = cancellable - }); - } + ct.Register(() => + { + fileLoader.CancelAsync(); + }); - private void RaiseOnProgressChangedEvent(int eventData) - { - RaiseOnProgressChangedEvent(eventData, true); - } + Log.WriteStart("Downloading file"); + Log.WriteInfo("Downloading file \"{0}\" to \"{1}\"", remoteFile, tmpFile); + + // Attach event handlers to track status of the download process + fileLoader.DownloadProgressChanged += (obj, e) => + { + if (ct.IsCancellationRequested) + return; - private void RaiseOnProgressChangedEvent(int eventData, bool cancellable) - { - if (ProgressChanged == null) - { - return; - } - // - ProgressChanged(this, new LoaderEventArgs { - EventData = eventData, - Cancellable = cancellable - }); - } + RaiseOnProgressChangedEvent(e.ProgressPercentage); + RaiseOnStatusChangedEvent(DownloadingSetupFilesMessage, + String.Format(DownloadProgressMessage, e.BytesReceived / 1024, e.TotalBytesToReceive / 1024)); + }; - private void RaiseOnOperationFailedEvent(Exception ex) - { - if (OperationFailed == null) - { - return; - } - // - OperationFailed(this, new LoaderEventArgs { EventData = ex }); - } + fileLoader.DownloadFileCompleted += (obj, e) => + { + if (ct.IsCancellationRequested == false) + { + RaiseOnProgressChangedEvent(100); + RaiseOnStatusChangedEvent(DownloadingSetupFilesMessage, "100%"); + } - private void RaiseOnOperationCompletedEvent() - { - if (OperationCompleted == null) - { - return; - } - // - OperationCompleted(this, EventArgs.Empty); - } + if (e.Cancelled) + { + CancelDownload(tmpFile); + } - /// - /// Displays process progress. - /// - private void LoadAppDistributiveInternal() - { - // - try - { - var service = ServiceProviderProxy.GetInstallerWebService(); - // - string dataFolder = FileUtils.GetDataDirectory(); - string tmpFolder = FileUtils.GetTempDirectory(); + autoEvent.Set(); + }; - if (!Directory.Exists(dataFolder)) - { - Directory.CreateDirectory(dataFolder); - Log.WriteInfo("Data directory created"); - } + fileLoader.DownloadFileAsync(new Uri(remoteFile), tmpFile); + RaiseOnStatusChangedEvent(DownloadingSetupFilesMessage); + + autoEvent.WaitOne(); + } + }, ct); - if (Directory.Exists(tmpFolder)) - { - FileUtils.DeleteTempDirectory(); - } + return downloadFileTask; + } + } - if (!Directory.Exists(tmpFolder)) - { - Directory.CreateDirectory(tmpFolder); - Log.WriteInfo("Tmp directory created"); - } + /// + /// Loader form. + /// + public class Loader + { + public const string ConnectingRemotServiceMessage = "Connecting..."; + public const string DownloadingSetupFilesMessage = "Downloading setup files..."; + public const string CopyingSetupFilesMessage = "Copying setup files..."; + public const string PreparingSetupFilesMessage = "Please wait while Setup prepares the necessary files..."; + public const string DownloadProgressMessage = "{0} KB of {1} KB"; + public const string PrepareSetupProgressMessage = "{0}%"; - string fileToDownload = null; - if (!string.IsNullOrEmpty(localFile)) - { - fileToDownload = localFile; - } - else - { - fileToDownload = Path.GetFileName(remoteFile); - } + private const int ChunkSize = 262144; + private string remoteFile; + private CancellationTokenSource cts; - string destinationFile = Path.Combine(dataFolder, fileToDownload); - string tmpFile = Path.Combine(tmpFolder, fileToDownload); + public event EventHandler> StatusChanged; + public event EventHandler> OperationFailed; + public event EventHandler> ProgressChanged; + public event EventHandler OperationCompleted; - //check whether file already downloaded - if (!File.Exists(destinationFile)) - { - if (string.IsNullOrEmpty(remoteFile)) - { - //need to get remote file name - RaiseOnStatusChangedEvent(ConnectingRemotServiceMessage); - // - RaiseOnProgressChangedEvent(0); - // - DataSet ds = service.GetReleaseFileInfo(componentCode, version); - // - RaiseOnProgressChangedEvent(100); - // - if (ds != null && - ds.Tables.Count > 0 && - ds.Tables[0].Rows.Count > 0) - { - DataRow row = ds.Tables[0].Rows[0]; - remoteFile = row["FullFilePath"].ToString(); - fileToDownload = Path.GetFileName(remoteFile); - destinationFile = Path.Combine(dataFolder, fileToDownload); - tmpFile = Path.Combine(tmpFolder, fileToDownload); - } - else - { - throw new Exception("Installer not found"); - } - } + public Loader(string remoteFile) + { + this.remoteFile = remoteFile; + } - // download file to tmp folder - RaiseOnStatusChangedEvent(DownloadingSetupFilesMessage); - // - RaiseOnProgressChangedEvent(0); - // - DownloadFile(remoteFile, tmpFile); - // - RaiseOnProgressChangedEvent(100); + public void LoadAppDistributive() + { + ThreadPool.QueueUserWorkItem(q => LoadAppDistributiveInternal()); + } - // copy downloaded file to data folder - RaiseOnStatusChangedEvent(CopyingSetupFilesMessage); - // - RaiseOnProgressChangedEvent(0); + protected void RaiseOnStatusChangedEvent(string statusMessage) + { + RaiseOnStatusChangedEvent(statusMessage, String.Empty); + } - // Ensure that the target does not exist. - if (File.Exists(destinationFile)) - FileUtils.DeleteFile(destinationFile); - File.Move(tmpFile, destinationFile); - // - RaiseOnProgressChangedEvent(100); - } + protected void RaiseOnStatusChangedEvent(string statusMessage, string eventData) + { + RaiseOnStatusChangedEvent(statusMessage, eventData, true); + } - // unzip file - RaiseOnStatusChangedEvent(PreparingSetupFilesMessage); - // - RaiseOnProgressChangedEvent(0); - // - UnzipFile(destinationFile, tmpFolder); - // - RaiseOnProgressChangedEvent(100); - // - RaiseOnOperationCompletedEvent(); - } - catch (Exception ex) - { - if (Utils.IsThreadAbortException(ex)) - return; + protected void RaiseOnStatusChangedEvent(string statusMessage, string eventData, bool cancellable) + { + if (StatusChanged == null) + { + return; + } + // No event data for status updates + StatusChanged(this, new LoaderEventArgs + { + StatusMessage = statusMessage, + EventData = eventData, + Cancellable = cancellable + }); + } - Log.WriteError("Loader module error", ex); - // - RaiseOnOperationFailedEvent(ex); - } - } + protected void RaiseOnProgressChangedEvent(int eventData) + { + RaiseOnProgressChangedEvent(eventData, true); + } - private void DownloadFile(string sourceFile, string destinationFile) - { - try - { - var service = ServiceProviderProxy.GetInstallerWebService(); - // - Log.WriteStart("Downloading file"); - Log.WriteInfo(string.Format("Downloading file \"{0}\" to \"{1}\"", sourceFile, destinationFile)); + protected void RaiseOnProgressChangedEvent(int eventData, bool cancellable) + { + if (ProgressChanged == null) + { + return; + } + // + ProgressChanged(this, new LoaderEventArgs + { + EventData = eventData, + Cancellable = cancellable + }); + } - long downloaded = 0; - long fileSize = service.GetFileSize(sourceFile); - if (fileSize == 0) - { - throw new FileNotFoundException("Service returned empty file.", sourceFile); - } + protected void RaiseOnOperationFailedEvent(Exception ex) + { + if (OperationFailed == null) + { + return; + } + // + OperationFailed(this, new LoaderEventArgs { EventData = ex }); + } - byte[] content; + protected void RaiseOnOperationCompletedEvent() + { + if (OperationCompleted == null) + { + return; + } + // + OperationCompleted(this, EventArgs.Empty); + } - while (downloaded < fileSize) - { - content = service.GetFileChunk(sourceFile, (int)downloaded, ChunkSize); - if (content == null) - { - throw new FileNotFoundException("Service returned NULL file content.", sourceFile); - } - FileUtils.AppendFileContent(destinationFile, content); - downloaded += content.Length; - //update progress bar - RaiseOnStatusChangedEvent(DownloadingSetupFilesMessage, - string.Format(DownloadProgressMessage, downloaded / 1024, fileSize / 1024)); - // - RaiseOnProgressChangedEvent(Convert.ToInt32((downloaded * 100) / fileSize)); + /// + /// Executes a file download request asynchronously + /// + private void LoadAppDistributiveInternal() + { + try + { + string dataFolder; + string tmpFolder; + // Retrieve local storage configuration + GetLocalStorageInfo(out dataFolder, out tmpFolder); + // Initialize storage + InitializeLocalStorage(dataFolder, tmpFolder); - if (content.Length < ChunkSize) - break; - } - // - RaiseOnStatusChangedEvent(DownloadingSetupFilesMessage, "100%"); - // - Log.WriteEnd(string.Format("Downloaded {0} bytes", downloaded)); - } - catch (Exception ex) - { - if (Utils.IsThreadAbortException(ex)) - return; + string fileToDownload = Path.GetFileName(remoteFile); - throw; - } - } + string destinationFile = Path.Combine(dataFolder, fileToDownload); + string tmpFile = Path.Combine(tmpFolder, fileToDownload); - private void UnzipFile(string zipFile, string destFolder) - { - try - { - int val = 0; - // Negative value means no progress made yet - int progress = -1; - // - Log.WriteStart("Unzipping file"); - Log.WriteInfo(string.Format("Unzipping file \"{0}\" to the folder \"{1}\"", zipFile, destFolder)); + cts = new CancellationTokenSource(); + CancellationToken token = cts.Token; - long zipSize = 0; - var zipInfo = ZipFile.Read(zipFile); - try - { - foreach (ZipEntry entry in zipInfo) - { - if (!entry.IsDirectory) - zipSize += entry.UncompressedSize; - } - } - finally - { - if (zipInfo != null) - { - zipInfo.Dispose(); - } - } + try + { + // Download the file requested + Task downloadFileTask = GetDownloadFileTask(remoteFile, tmpFile, token); + // Move the file downloaded from temporary location to Data folder + var moveFileTask = downloadFileTask.ContinueWith((t) => + { + if (File.Exists(tmpFile)) + { + // copy downloaded file to data folder + RaiseOnStatusChangedEvent(CopyingSetupFilesMessage); + // + RaiseOnProgressChangedEvent(0); - long unzipped = 0; - // - var zip = ZipFile.Read(zipFile); - // - try - { - foreach (ZipEntry entry in zip) - { - // - entry.Extract(destFolder, ExtractExistingFileAction.OverwriteSilently); - // - if (!entry.IsDirectory) - unzipped += entry.UncompressedSize; + // Ensure that the target does not exist. + if (File.Exists(destinationFile)) + FileUtils.DeleteFile(destinationFile); + File.Move(tmpFile, destinationFile); + // + RaiseOnProgressChangedEvent(100); + } + }, TaskContinuationOptions.NotOnCanceled); + // Unzip file downloaded + var unzipFileTask = moveFileTask.ContinueWith((t) => + { + if (File.Exists(destinationFile)) + { + RaiseOnStatusChangedEvent(PreparingSetupFilesMessage); + // + RaiseOnProgressChangedEvent(0); + // + UnzipFile(destinationFile, tmpFolder); + // + RaiseOnProgressChangedEvent(100); + } + }, token); + // + var notifyCompletionTask = unzipFileTask.ContinueWith((t) => + { + RaiseOnOperationCompletedEvent(); + }, token); + + downloadFileTask.Start(); + downloadFileTask.Wait(); + } + catch (AggregateException ae) + { + ae.Handle((e) => + { + // We handle cancellation requests + if (e is OperationCanceledException) + { + CancelDownload(tmpFile); + Log.WriteInfo("Download has been cancelled by the user"); + return true; + } + // But other issues just being logged + Log.WriteError("Could not download the file", e); + return false; + }); + } + } + catch (Exception ex) + { + if (Utils.IsThreadAbortException(ex)) + return; - if (zipSize != 0) - { - val = Convert.ToInt32(unzipped * 100 / zipSize); - // Skip to raise the progress event change when calculated progress - // and the current progress value are even - if (val == progress) - { - continue; - } - // - RaiseOnStatusChangedEvent( - PreparingSetupFilesMessage, - String.Format(PrepareSetupProgressMessage, val), - false); - // - RaiseOnProgressChangedEvent(val, false); - } - } - // Notify client the operation can be cancelled at this time - RaiseOnProgressChangedEvent(100); - // - Log.WriteEnd("Unzipped file"); - } - finally - { - if (zip != null) - { - zip.Dispose(); - } - } - } - catch (Exception ex) - { - if (Utils.IsThreadAbortException(ex)) - return; - // - RaiseOnOperationFailedEvent(ex); - } - } + Log.WriteError("Loader module error", ex); + // + RaiseOnOperationFailedEvent(ex); + } + } - public void AbortOperation() - { - if (thread != null) - { - if (thread.IsAlive) - { - thread.Abort(); - } - thread.Join(); - } - } - } + protected virtual Task GetDownloadFileTask(string sourceFile, string tmpFile, CancellationToken ct) + { + var downloadFileTask = new Task(() => + { + if (!File.Exists(tmpFile)) + { + var service = ServiceProviderProxy.GetInstallerWebService(); + + RaiseOnProgressChangedEvent(0); + RaiseOnStatusChangedEvent(DownloadingSetupFilesMessage); + + Log.WriteStart("Downloading file"); + Log.WriteInfo(string.Format("Downloading file \"{0}\" to \"{1}\"", sourceFile, tmpFile)); + + long downloaded = 0; + long fileSize = service.GetFileSize(sourceFile); + if (fileSize == 0) + { + throw new FileNotFoundException("Service returned empty file.", sourceFile); + } + + byte[] content; + + while (downloaded < fileSize) + { + // Throw OperationCancelledException if there is an incoming cancel request + ct.ThrowIfCancellationRequested(); + + content = service.GetFileChunk(sourceFile, (int)downloaded, ChunkSize); + if (content == null) + { + throw new FileNotFoundException("Service returned NULL file content.", sourceFile); + } + FileUtils.AppendFileContent(tmpFile, content); + downloaded += content.Length; + // Update download progress + RaiseOnStatusChangedEvent(DownloadingSetupFilesMessage, + string.Format(DownloadProgressMessage, downloaded / 1024, fileSize / 1024)); + + RaiseOnProgressChangedEvent(Convert.ToInt32((downloaded * 100) / fileSize)); + + if (content.Length < ChunkSize) + break; + } + + RaiseOnStatusChangedEvent(DownloadingSetupFilesMessage, "100%"); + Log.WriteEnd(string.Format("Downloaded {0} bytes", downloaded)); + } + }, ct); + + return downloadFileTask; + } + + private static void InitializeLocalStorage(string dataFolder, string tmpFolder) + { + if (!Directory.Exists(dataFolder)) + { + Directory.CreateDirectory(dataFolder); + Log.WriteInfo("Data directory created"); + } + + if (Directory.Exists(tmpFolder)) + { + Directory.Delete(tmpFolder, true); + } + + if (!Directory.Exists(tmpFolder)) + { + Directory.CreateDirectory(tmpFolder); + Log.WriteInfo("Tmp directory created"); + } + } + + private static void GetLocalStorageInfo(out string dataFolder, out string tmpFolder) + { + dataFolder = FileUtils.GetDataDirectory(); + tmpFolder = FileUtils.GetTempDirectory(); + } + + private void UnzipFile(string zipFile, string destFolder) + { + try + { + int val = 0; + // Negative value means no progress made yet + int progress = -1; + // + Log.WriteStart("Unzipping file"); + Log.WriteInfo(string.Format("Unzipping file \"{0}\" to the folder \"{1}\"", zipFile, destFolder)); + + long zipSize = 0; + var zipInfo = ZipFile.Read(zipFile); + try + { + foreach (ZipEntry entry in zipInfo) + { + if (!entry.IsDirectory) + zipSize += entry.UncompressedSize; + } + } + finally + { + if (zipInfo != null) + { + zipInfo.Dispose(); + } + } + + long unzipped = 0; + // + var zip = ZipFile.Read(zipFile); + // + try + { + foreach (ZipEntry entry in zip) + { + // + entry.Extract(destFolder, ExtractExistingFileAction.OverwriteSilently); + // + if (!entry.IsDirectory) + unzipped += entry.UncompressedSize; + + if (zipSize != 0) + { + val = Convert.ToInt32(unzipped * 100 / zipSize); + // Skip to raise the progress event change when calculated progress + // and the current progress value are even + if (val == progress) + { + continue; + } + // + RaiseOnStatusChangedEvent( + PreparingSetupFilesMessage, + String.Format(PrepareSetupProgressMessage, val), + false); + // + RaiseOnProgressChangedEvent(val, false); + } + } + // Notify client the operation can be cancelled at this time + RaiseOnProgressChangedEvent(100); + // + Log.WriteEnd("Unzipped file"); + } + finally + { + if (zip != null) + { + zip.Dispose(); + } + } + } + catch (Exception ex) + { + if (Utils.IsThreadAbortException(ex)) + return; + // + RaiseOnOperationFailedEvent(ex); + } + } + + /// + /// Cleans up temporary file if the download process has been cancelled. + /// + /// Path to the temporary file to cleanup + protected virtual void CancelDownload(string tmpFile) + { + if (File.Exists(tmpFile)) + { + File.Delete(tmpFile); + } + } + + public void AbortOperation() + { + // Make sure we are in business + if (cts != null) + { + cts.Cancel(); + } + } + } } \ No newline at end of file diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/ServiceComponentNotFoundException.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/ServiceComponentNotFoundException.cs new file mode 100644 index 00000000..d0f2ab78 --- /dev/null +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/ServiceComponentNotFoundException.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WebsitePanel.Installer.Core +{ + class ServiceComponentNotFoundException : Exception + { + private string p; + + public ServiceComponentNotFoundException(string p) + : base(p) + { + } + } +} diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/WebsitePanel.Installer.Core.csproj b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/WebsitePanel.Installer.Core.csproj index 954d8f1c..c33c09e2 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/WebsitePanel.Installer.Core.csproj +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/WebsitePanel.Installer.Core.csproj @@ -35,6 +35,7 @@ ..\..\Lib\Ionic.Zip.Reduced.dll + @@ -80,6 +81,7 @@ True Settings.settings + Code diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ComponentControl.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ComponentControl.cs index 2420e91a..d24c5383 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ComponentControl.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ComponentControl.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, @@ -211,7 +211,7 @@ namespace WebsitePanel.Installer.Controls { Log.WriteInfo(string.Format("Updating {0}", componentName)); //download installer - Loader form = new Loader(this.AppContext, fileName); + Loader form = new Loader(fileName, (e) => AppContext.AppForm.ShowError(e)); DialogResult result = form.ShowDialog(this); if (result == DialogResult.OK) { @@ -273,7 +273,7 @@ namespace WebsitePanel.Installer.Controls { Log.WriteInfo(string.Format("Uninstalling {0}", componentName)); //download installer - Loader form = new Loader(this.AppContext, installer, componentCode, release); + Loader form = new Loader(installer, componentCode, release, (e) => AppContext.AppForm.ShowError(e)); DialogResult result = form.ShowDialog(this); if (result == DialogResult.OK) { @@ -326,15 +326,15 @@ namespace WebsitePanel.Installer.Controls string path = element.GetStringSetting("InstallerPath"); string type = element.GetStringSetting("InstallerType"); string componentId = element.ID; - string componentCode = element.GetStringSetting("ComponentCode"); + string ccode = element.GetStringSetting("ComponentCode"); string componentName = element.GetStringSetting("ComponentName"); - string release = element.GetStringSetting("Release"); + string cversion = element.GetStringSetting("Release"); try { - Log.WriteInfo(string.Format("Setup {0} {1}", componentName, release)); - //download installer - Loader form = new Loader(this.AppContext, installer, componentCode, release); + Log.WriteInfo(string.Format("Setup {0} {1}", componentName, cversion)); + //download installer + Loader form = new Loader(installer, ccode, cversion, (e) => AppContext.AppForm.ShowError(e)); DialogResult result = form.ShowDialog(this); if (result == DialogResult.OK) { diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ComponentsControl.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ComponentsControl.cs index 2cfb8907..218d7520 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ComponentsControl.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ComponentsControl.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, @@ -45,273 +45,273 @@ using WebsitePanel.Installer.Configuration; namespace WebsitePanel.Installer.Controls { - /// - /// Components control - /// - internal partial class ComponentsControl : ResultViewControl - { - delegate void SetGridDataSourceCallback(object dataSource, string dataMember); + /// + /// Components control + /// + internal partial class ComponentsControl : ResultViewControl + { + delegate void SetGridDataSourceCallback(object dataSource, string dataMember); - private string componentCode = null; - private string componentVersion = null; - private string componentSettingsXml = null; + private string componentCode = null; + private string componentVersion = null; + private string componentSettingsXml = null; - public ComponentsControl() - { - InitializeComponent(); - grdComponents.AutoGenerateColumns = false; - } + public ComponentsControl() + { + InitializeComponent(); + grdComponents.AutoGenerateColumns = false; + } - /// - /// Action on click Install link - /// - /// - /// - private void OnInstallLinkClick(object sender, DataGridViewCellEventArgs e) - { - if (e.ColumnIndex == grdComponents.Columns.IndexOf(colLink)) - { - DataRowView row = grdComponents.Rows[e.RowIndex].DataBoundItem as DataRowView; - if (row != null) - { - StartInstaller(row); - StartLoadingComponents(); - } - } - } + /// + /// Action on click Install link + /// + /// + /// + private void OnInstallLinkClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex == grdComponents.Columns.IndexOf(colLink)) + { + DataRowView row = grdComponents.Rows[e.RowIndex].DataBoundItem as DataRowView; + if (row != null) + { + StartInstaller(row); + StartLoadingComponents(); + } + } + else + { - private void StartInstaller(DataRowView row) - { - string applicationName = Utils.GetDbString(row[Global.Parameters.ApplicationName]); - string componentName = Utils.GetDbString(row[Global.Parameters.ComponentName]); - string componentCode = Utils.GetDbString(row[Global.Parameters.ComponentCode]); - string componentDescription = Utils.GetDbString(row[Global.Parameters.ComponentDescription]); - string component = Utils.GetDbString(row[Global.Parameters.Component]); - string version = Utils.GetDbString(row[Global.Parameters.Version]); - string fileName = row[Global.Parameters.FullFilePath].ToString(); - string installerPath = Utils.GetDbString(row[Global.Parameters.InstallerPath]); - string installerType = Utils.GetDbString(row[Global.Parameters.InstallerType]); + } + } - if (CheckForInstalledComponent(componentCode)) - { - AppContext.AppForm.ShowWarning(Global.Messages.ComponentIsAlreadyInstalled); - return; - } - try - { - // download installer - Loader form = new Loader(this.AppContext, fileName); - DialogResult result = form.ShowDialog(this); + private void StartInstaller(DataRowView row) + { + string applicationName = Utils.GetDbString(row[Global.Parameters.ApplicationName]); + string componentName = Utils.GetDbString(row[Global.Parameters.ComponentName]); + string componentCode = Utils.GetDbString(row[Global.Parameters.ComponentCode]); + string componentDescription = Utils.GetDbString(row[Global.Parameters.ComponentDescription]); + string component = Utils.GetDbString(row[Global.Parameters.Component]); + string version = Utils.GetDbString(row[Global.Parameters.Version]); + string fileName = row[Global.Parameters.FullFilePath].ToString(); + string installerPath = Utils.GetDbString(row[Global.Parameters.InstallerPath]); + string installerType = Utils.GetDbString(row[Global.Parameters.InstallerType]); - if (result == DialogResult.OK) - { - string tmpFolder = FileUtils.GetTempDirectory(); - string path = Path.Combine(tmpFolder, installerPath); - Update(); - string method = "Install"; - Log.WriteStart(string.Format("Running installer {0}.{1} from {2}", installerType, method, path)); + if (CheckForInstalledComponent(componentCode)) + { + AppContext.AppForm.ShowWarning(Global.Messages.ComponentIsAlreadyInstalled); + return; + } + try + { + // download installer + Loader form = new Loader(fileName, (e) => AppContext.AppForm.ShowError(e)); + DialogResult result = form.ShowDialog(this); - //prepare installer args - Hashtable args = new Hashtable(); + if (result == DialogResult.OK) + { + string tmpFolder = FileUtils.GetTempDirectory(); + string path = Path.Combine(tmpFolder, installerPath); + Update(); + string method = "Install"; + Log.WriteStart(string.Format("Running installer {0}.{1} from {2}", installerType, method, path)); - args[Global.Parameters.ComponentName] = componentName; - args[Global.Parameters.ApplicationName] = applicationName; - args[Global.Parameters.ComponentCode] = componentCode; - args[Global.Parameters.ComponentDescription] = componentDescription; - args[Global.Parameters.Version] = version; - args[Global.Parameters.InstallerFolder] = tmpFolder; - args[Global.Parameters.InstallerPath] = installerPath; - args[Global.Parameters.InstallerType] = installerType; - args[Global.Parameters.Installer] = Path.GetFileName(fileName); - args[Global.Parameters.ShellVersion] = AssemblyLoader.GetShellVersion(); - args[Global.Parameters.BaseDirectory] = FileUtils.GetCurrentDirectory(); - args[Global.Parameters.ShellMode] = Global.VisualInstallerShell; - args[Global.Parameters.IISVersion] = Global.IISVersion; - args[Global.Parameters.SetupXml] = this.componentSettingsXml; - args[Global.Parameters.ParentForm] = FindForm(); + //prepare installer args + Hashtable args = new Hashtable(); - //run installer - DialogResult res = (DialogResult)AssemblyLoader.Execute(path, installerType, method, new object[] { args }); - Log.WriteInfo(string.Format("Installer returned {0}", res)); - Log.WriteEnd("Installer finished"); - Update(); - if (res == DialogResult.OK) - { - AppContext.AppForm.ReloadApplication(); - } - FileUtils.DeleteTempDirectory(); - } - } - catch (Exception ex) - { - Log.WriteError("Installer error", ex); - AppContext.AppForm.ShowError(ex); - } - finally - { - this.componentSettingsXml = null; - this.componentCode = null; - } + args[Global.Parameters.ComponentName] = componentName; + args[Global.Parameters.ApplicationName] = applicationName; + args[Global.Parameters.ComponentCode] = componentCode; + args[Global.Parameters.ComponentDescription] = componentDescription; + args[Global.Parameters.Version] = version; + args[Global.Parameters.InstallerFolder] = tmpFolder; + args[Global.Parameters.InstallerPath] = installerPath; + args[Global.Parameters.InstallerType] = installerType; + args[Global.Parameters.Installer] = Path.GetFileName(fileName); + args[Global.Parameters.ShellVersion] = AssemblyLoader.GetShellVersion(); + args[Global.Parameters.BaseDirectory] = FileUtils.GetCurrentDirectory(); + args[Global.Parameters.ShellMode] = Global.VisualInstallerShell; + args[Global.Parameters.IISVersion] = Global.IISVersion; + args[Global.Parameters.SetupXml] = this.componentSettingsXml; + args[Global.Parameters.ParentForm] = FindForm(); - } + //run installer + DialogResult res = (DialogResult)AssemblyLoader.Execute(path, installerType, method, new object[] { args }); + Log.WriteInfo(string.Format("Installer returned {0}", res)); + Log.WriteEnd("Installer finished"); + Update(); + if (res == DialogResult.OK) + { + AppContext.AppForm.ReloadApplication(); + } + FileUtils.DeleteTempDirectory(); + } + } + catch (Exception ex) + { + Log.WriteError("Installer error", ex); + AppContext.AppForm.ShowError(ex); + } + finally + { + this.componentSettingsXml = null; + this.componentCode = null; + } - private bool CheckForInstalledComponent(string componentCode) - { - bool ret = false; - List installedComponents = new List(); - foreach (ComponentConfigElement componentConfig in AppConfigManager.AppConfiguration.Components) - { - string code = componentConfig.Settings["ComponentCode"].Value; - installedComponents.Add(code); - if (code == componentCode) - { - ret = true; - break; - } - } - if (componentCode == "standalone") - { - if (installedComponents.Contains("server") || - installedComponents.Contains("enterprise server") || - installedComponents.Contains("portal")) - ret = true; - } - return ret; - } + } - /// - /// Displays component description when entering grid row - /// - /// - /// - private void OnRowEnter(object sender, DataGridViewCellEventArgs e) - { - DataRowView row = grdComponents.Rows[e.RowIndex].DataBoundItem as DataRowView; - if (row != null) - { - lblDescription.Text = Utils.GetDbString(row["ComponentDescription"]); - } - } + private bool CheckForInstalledComponent(string componentCode) + { + bool ret = false; + List installedComponents = new List(); + foreach (ComponentConfigElement componentConfig in AppConfigManager.AppConfiguration.Components) + { + string code = componentConfig.Settings["ComponentCode"].Value; + installedComponents.Add(code); + if (code == componentCode) + { + ret = true; + break; + } + } + if (componentCode == "standalone") + { + if (installedComponents.Contains("server") || + installedComponents.Contains("enterprise server") || + installedComponents.Contains("portal")) + ret = true; + } + return ret; + } - /// - /// Start new thread to load components - /// - /// - /// - private void OnLoadComponentsClick(object sender, EventArgs e) - { - StartLoadingComponents(); - } + /// + /// Displays component description when entering grid row + /// + /// + /// + private void OnRowEnter(object sender, DataGridViewCellEventArgs e) + { + DataRowView row = grdComponents.Rows[e.RowIndex].DataBoundItem as DataRowView; + if (row != null) + { + lblDescription.Text = Utils.GetDbString(row["ComponentDescription"]); + } + } - private void StartLoadingComponents() - { - //load list of available components in the separate thread - AppContext.AppForm.StartAsyncProgress("Connecting...", true); - ThreadStart threadDelegate = new ThreadStart(LoadComponents); - Thread newThread = new Thread(threadDelegate); - newThread.Start(); - } + /// + /// Start new thread to load components + /// + /// + /// + private void OnLoadComponentsClick(object sender, EventArgs e) + { + StartLoadingComponents(); + } - /// - /// Loads list of available components via web service - /// - private void LoadComponents() - { - try - { - Log.WriteStart("Loading list of available components"); - lblDescription.Text = string.Empty; - //load components via web service - var webService = ServiceProviderProxy.GetInstallerWebService(); - DataSet dsComponents = webService.GetAvailableComponents(); - //remove already installed components - foreach (DataRow row in dsComponents.Tables[0].Rows) - { - string componentCode = Utils.GetDbString(row["ComponentCode"]); - if (CheckForInstalledComponent(componentCode)) - { - row.Delete(); - } - } - dsComponents.AcceptChanges(); - Log.WriteEnd("Available components loaded"); - SetGridDataSource(dsComponents, dsComponents.Tables[0].TableName); - AppContext.AppForm.FinishProgress(); - } - catch (Exception ex) - { - Log.WriteError("Web service error", ex); - AppContext.AppForm.FinishProgress(); - AppContext.AppForm.ShowServerError(); - } - } + private void StartLoadingComponents() + { + //load list of available components in the separate thread + AppContext.AppForm.StartAsyncProgress("Connecting...", true); + ThreadPool.QueueUserWorkItem(o => LoadComponents()); + } - /// - /// Thread safe grid binding. - /// - /// Data source - /// Data member - private void SetGridDataSource(object dataSource, string dataMember) - { - // InvokeRequired required compares the thread ID of the - // calling thread to the thread ID of the creating thread. - // If these threads are different, it returns true. - if (this.grdComponents.InvokeRequired) - { - SetGridDataSourceCallback callBack = new SetGridDataSourceCallback(SetGridDataSource); - this.grdComponents.Invoke(callBack, new object[] { dataSource, dataMember }); - } - else - { - this.grdComponents.DataSource = dataSource; - this.grdComponents.DataMember = dataMember; - } - } + /// + /// Loads list of available components via web service + /// + private void LoadComponents() + { + try + { + Log.WriteStart("Loading list of available components"); + lblDescription.Text = string.Empty; + //load components via web service + var webService = ServiceProviderProxy.GetInstallerWebService(); + DataSet dsComponents = webService.GetAvailableComponents(); + //remove already installed components + foreach (DataRow row in dsComponents.Tables[0].Rows) + { + string componentCode = Utils.GetDbString(row["ComponentCode"]); + if (CheckForInstalledComponent(componentCode)) + { + row.Delete(); + } + } + dsComponents.AcceptChanges(); + Log.WriteEnd("Available components loaded"); + SetGridDataSource(dsComponents, dsComponents.Tables[0].TableName); + AppContext.AppForm.FinishProgress(); + } + catch (Exception ex) + { + Log.WriteError("Web service error", ex); + AppContext.AppForm.FinishProgress(); + AppContext.AppForm.ShowServerError(); + } + } - /// - /// Installs component during unattended setup - /// - /// - internal void InstallComponent(string componentCode, string componentVersion, string settingsXml) - { - //load list of available components in the separate thread - this.componentCode = componentCode; - this.componentVersion = componentVersion; - this.componentSettingsXml = settingsXml; - AppContext.AppForm.StartAsyncProgress("Connecting...", true); - ThreadStart threadDelegate = new ThreadStart(Install); - Thread newThread = new Thread(threadDelegate); - newThread.Start(); - } + /// + /// Thread safe grid binding. + /// + /// Data source + /// Data member + private void SetGridDataSource(object dataSource, string dataMember) + { + // InvokeRequired required compares the thread ID of the + // calling thread to the thread ID of the creating thread. + // If these threads are different, it returns true. + if (this.grdComponents.InvokeRequired) + { + SetGridDataSourceCallback callBack = new SetGridDataSourceCallback(SetGridDataSource); + this.grdComponents.Invoke(callBack, new object[] { dataSource, dataMember }); + } + else + { + this.grdComponents.DataSource = dataSource; + this.grdComponents.DataMember = dataMember; + } + } - /// - /// Loads list of available components via web service and install specified component - /// during unattended setup - /// - private void Install() - { - LoadComponents(); - foreach (DataGridViewRow gridRow in grdComponents.Rows) - { - DataRowView row = gridRow.DataBoundItem as DataRowView; - if (row != null) - { - string code = Utils.GetDbString(row["ComponentCode"]); - string version = Utils.GetDbString(row["Version"]); - if (code == componentCode) - { - //check component version if specified - if (!string.IsNullOrEmpty(componentVersion)) - { - if (version != componentVersion) - continue; - } - StartInstaller(row); - AppContext.AppForm.ProceedUnattendedSetup(); - break; - } - } - } - } - } + /// + /// Installs component during unattended setup + /// + /// + internal void InstallComponent(string componentCode, string componentVersion, string settingsXml) + { + //load list of available components in the separate thread + this.componentCode = componentCode; + this.componentVersion = componentVersion; + this.componentSettingsXml = settingsXml; + AppContext.AppForm.StartAsyncProgress("Connecting...", true); + ThreadPool.QueueUserWorkItem(o => Install()); + } + + /// + /// Loads list of available components via web service and install specified component + /// during unattended setup + /// + private void Install() + { + LoadComponents(); + foreach (DataGridViewRow gridRow in grdComponents.Rows) + { + DataRowView row = gridRow.DataBoundItem as DataRowView; + if (row != null) + { + string code = Utils.GetDbString(row["ComponentCode"]); + string version = Utils.GetDbString(row["Version"]); + if (code == componentCode) + { + //check component version if specified + if (!string.IsNullOrEmpty(componentVersion)) + { + if (version != componentVersion) + continue; + } + StartInstaller(row); + AppContext.AppForm.ProceedUnattendedSetup(); + break; + } + } + } + } + } } diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/Loader.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/Loader.cs index 81eeab02..8fd6558b 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/Loader.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/Loader.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, @@ -39,118 +39,156 @@ using Ionic.Zip; using WebsitePanel.Installer.Services; using WebsitePanel.Installer.Common; +using WebsitePanel.Installer.Core; namespace WebsitePanel.Installer.Controls { - public delegate void OperationProgressDelegate(int percentage); + public delegate void OperationProgressDelegate(int percentage); - /// - /// Loader form. - /// - internal partial class Loader : Form - { - private AppContext appContext; - private Core.Loader appLoader; + /// + /// Loader form. + /// + internal partial class Loader : Form + { + private Core.Loader appLoader; - public Loader() - { - InitializeComponent(); - DialogResult = DialogResult.Cancel; - } + public Loader() + { + InitializeComponent(); + DialogResult = DialogResult.Cancel; + } - public Loader(AppContext context, string remoteFile) - : this() - { - this.appContext = context; - // - appLoader = new Core.Loader(remoteFile); - // - Start(); - } + public Loader(string remoteFile, Action callback) + : this() + { + Start(remoteFile, callback); + } - public Loader(AppContext context, string localFile, string componentCode, string version) - : this() - { - this.appContext = context; - // - appLoader = new Core.Loader(localFile, componentCode, version); - // - Start(); - } + public Loader(string localFile, string componentCode, string version, Action callback) + : this() + { + Start(componentCode, version, callback); + } - private void Start() - { - // - appLoader.OperationFailed += new EventHandler>(appLoader_OperationFailed); - appLoader.ProgressChanged += new EventHandler>(appLoader_ProgressChanged); - appLoader.StatusChanged += new EventHandler>(appLoader_StatusChanged); - appLoader.OperationCompleted += new EventHandler(appLoader_OperationCompleted); - // - appLoader.LoadAppDistributive(); - } + /// + /// Resolves URL of the component's distributive and initiates download process. + /// + /// Component code to resolve + /// Component version to resolve + private void Start(string componentCode, string version, Action callback) + { + string remoteFile = Utils.GetDistributiveLocationInfo(componentCode, version); - void appLoader_OperationCompleted(object sender, EventArgs e) - { - DialogResult = DialogResult.OK; - Close(); - } + Start(remoteFile, callback); + } - void appLoader_StatusChanged(object sender, Core.LoaderEventArgs e) - { - lblProcess.Text = e.StatusMessage; - lblValue.Text = e.EventData; - // Adjust Cancel button availability for an operation being performed - if (btnCancel.Enabled != e.Cancellable) - { - btnCancel.Enabled = e.Cancellable; - } - // This check allows to avoid extra form redrawing operations - if (ControlBox != e.Cancellable) - { - ControlBox = e.Cancellable; - } - } + /// + /// Initializes and starts the app distributive download process. + /// + /// URL of the file to be downloaded + private void Start(string remoteFile, Action callback) + { + appLoader = Core.LoaderFactory.CreateFileLoader(remoteFile); - void appLoader_ProgressChanged(object sender, Core.LoaderEventArgs e) - { - progressBar.Value = e.EventData; - // Adjust Cancel button availability for an operation being performed - if (btnCancel.Enabled != e.Cancellable) - { - btnCancel.Enabled = e.Cancellable; - } - // This check allows to avoid extra form redrawing operations - if (ControlBox != e.Cancellable) - { - ControlBox = e.Cancellable; - } - } + appLoader.OperationFailed += new EventHandler>(appLoader_OperationFailed); + appLoader.OperationFailed += (object sender, Core.LoaderEventArgs e) => { + if (callback != null) + { + try + { + callback(e.EventData); + } + catch + { + // Just swallow the exception as we have no interest in it. + } + } + }; + appLoader.ProgressChanged += new EventHandler>(appLoader_ProgressChanged); + appLoader.StatusChanged += new EventHandler>(appLoader_StatusChanged); + appLoader.OperationCompleted += new EventHandler(appLoader_OperationCompleted); - void appLoader_OperationFailed(object sender, Core.LoaderEventArgs e) - { - appContext.AppForm.ShowError(e.EventData); - // - DialogResult = DialogResult.Abort; - Close(); - } + appLoader.LoadAppDistributive(); + } - private void btnCancel_Click(object sender, EventArgs e) - { - Log.WriteInfo("Execution was canceled by user"); - Close(); - } + void appLoader_OperationCompleted(object sender, EventArgs e) + { + DialogResult = DialogResult.OK; + Close(); + } - private void OnLoaderFormClosing(object sender, FormClosingEventArgs e) - { - if (this.DialogResult == DialogResult.Cancel) - { - appLoader.AbortOperation(); - } - // Remove event handlers - appLoader.OperationFailed -= new EventHandler>(appLoader_OperationFailed); - appLoader.ProgressChanged -= new EventHandler>(appLoader_ProgressChanged); - appLoader.StatusChanged -= new EventHandler>(appLoader_StatusChanged); - appLoader.OperationCompleted -= new EventHandler(appLoader_OperationCompleted); - } - } + void appLoader_StatusChanged(object sender, Core.LoaderEventArgs e) + { + lblProcess.Text = e.StatusMessage; + lblValue.Text = e.EventData; + // Adjust Cancel button availability for an operation being performed + if (btnCancel.Enabled != e.Cancellable) + { + btnCancel.Enabled = e.Cancellable; + } + // This check allows to avoid extra form redrawing operations + if (ControlBox != e.Cancellable) + { + ControlBox = e.Cancellable; + } + } + + void appLoader_ProgressChanged(object sender, Core.LoaderEventArgs e) + { + bool updateControl = (progressBar.Value != e.EventData); + progressBar.Value = e.EventData; + // Adjust Cancel button availability for an operation being performed + if (btnCancel.Enabled != e.Cancellable) + { + btnCancel.Enabled = e.Cancellable; + } + // This check allows to avoid extra form redrawing operations + if (ControlBox != e.Cancellable) + { + ControlBox = e.Cancellable; + } + // + if (updateControl) + { + progressBar.Update(); + } + } + + void appLoader_OperationFailed(object sender, Core.LoaderEventArgs e) + { + DialogResult = DialogResult.Abort; + Close(); + } + + private void btnCancel_Click(object sender, EventArgs e) + { + DetachEventHandlers(); + Log.WriteInfo("Execution was canceled by user"); + Close(); + } + + private void DetachEventHandlers() + { + // Detach event handlers + if (appLoader != null) + { + appLoader.OperationFailed -= new EventHandler>(appLoader_OperationFailed); + appLoader.ProgressChanged -= new EventHandler>(appLoader_ProgressChanged); + appLoader.StatusChanged -= new EventHandler>(appLoader_StatusChanged); + appLoader.OperationCompleted -= new EventHandler(appLoader_OperationCompleted); + } + } + + private void OnLoaderFormClosing(object sender, FormClosingEventArgs e) + { + if (this.DialogResult == DialogResult.Cancel) + { + if (appLoader != null) + { + appLoader.AbortOperation(); + appLoader = null; + } + } + } + } } \ No newline at end of file diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe index b3fb1974bb37500dc3e5a856fe2f9da322cfd2cb..92ddc22630d1e9da6330d7e5999a9c0563d452f7 100644 GIT binary patch delta 36433 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 delta 36464 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 diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ExpressInstallPage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ExpressInstallPage.cs index 45447e4f..f101d6da 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ExpressInstallPage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ExpressInstallPage.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, @@ -1901,52 +1901,52 @@ namespace WebsitePanel.Setup } } - private void UpdateWebConfigNamespaces() - { - try - { - // find all .config files in the installation directory - string[] configFiles = Directory.GetFiles(Wizard.SetupVariables.InstallationFolder, - "*.config", SearchOption.TopDirectoryOnly); + private void UpdateWebConfigNamespaces() + { + try + { + // find all .config files in the installation directory + string[] configFiles = Directory.GetFiles(Wizard.SetupVariables.InstallationFolder, + "*.config", SearchOption.TopDirectoryOnly); - if (configFiles != null && configFiles.Length > 0) - { - foreach (string path in configFiles) - { - try - { - Log.WriteStart(String.Format("Updating '{0}' file", path)); + if (configFiles != null && configFiles.Length > 0) + { + foreach (string path in configFiles) + { + try + { + Log.WriteStart(String.Format("Updating '{0}' file", path)); - // load configuration file in memory - string content = File.ReadAllText(path); + // load configuration file in memory + string content = File.ReadAllText(path); - // replace DotNetPark. to empty strings - content = Regex.Replace(content, "dotnetpark\\.", "", RegexOptions.IgnoreCase); + // replace DotNetPark. to empty strings + content = Regex.Replace(content, "dotnetpark\\.", "", RegexOptions.IgnoreCase); - // save updated config - File.WriteAllText(path, content); + // save updated config + File.WriteAllText(path, content); - Log.WriteEnd(String.Format("Updated '{0}' file", path)); - InstallLog.AppendLine(String.Format("- Updated {0} file", path)); - } - catch (Exception ex) - { - if (Utils.IsThreadAbortException(ex)) - return; - Log.WriteError(String.Format("Error updating '{0}' file", path), ex); - throw; - } - } - } - } - catch (Exception ex) - { - if (Utils.IsThreadAbortException(ex)) - return; - Log.WriteError("Error listing *.config files", ex); - throw; - } - } + Log.WriteEnd(String.Format("Updated '{0}' file", path)); + InstallLog.AppendLine(String.Format("- Updated {0} file", path)); + } + catch (Exception ex) + { + if (Utils.IsThreadAbortException(ex)) + return; + Log.WriteError(String.Format("Error updating '{0}' file", path), ex); + throw; + } + } + } + } + catch (Exception ex) + { + if (Utils.IsThreadAbortException(ex)) + return; + Log.WriteError("Error listing *.config files", ex); + throw; + } + } private void UpdateEnterpriseServerUrl() { From a65114c32c3ea242ea6546f9e3f0e585808aa1a1 Mon Sep 17 00:00:00 2001 From: pavelt Date: Tue, 14 Feb 2012 15:32:34 -0800 Subject: [PATCH 15/38] Updated year in copyright header --- .../Sources/WebsitePanel.Installer.Core/AppConfigManager.cs | 2 +- .../WebsitePanel.Installer.Core/Common/AssemblyLoader.cs | 2 +- .../Sources/WebsitePanel.Installer.Core/Common/Global.cs | 2 +- .../Sources/WebsitePanel.Installer.Core/Common/Log.cs | 2 +- .../Sources/WebsitePanel.Installer.Core/Common/OS.cs | 2 +- .../Sources/WebsitePanel.Installer.Core/Common/RegistryUtils.cs | 2 +- .../Configuration/ComponentCollection.cs | 2 +- .../Configuration/ComponentConfigElement.cs | 2 +- .../WebsitePanel.Installer.Core/Configuration/ConfigKeys.cs | 2 +- .../Configuration/InstallerSection.cs | 2 +- .../Sources/WebsitePanel.Installer.Core/ServiceProviderProxy.cs | 2 +- .../Sources/WebsitePanel.Installer/ApplicationForm.cs | 2 +- .../Sources/WebsitePanel.Installer/Common/AppContext.cs | 2 +- .../Sources/WebsitePanel.Installer/Common/ProgressManager.cs | 2 +- .../Sources/WebsitePanel.Installer/Common/ScopeNode.cs | 2 +- .../Sources/WebsitePanel.Installer/Common/User32.cs | 2 +- .../Sources/WebsitePanel.Installer/Common/Utils.cs | 2 +- .../Sources/WebsitePanel.Installer/Controls/LineBox.cs | 2 +- .../Sources/WebsitePanel.Installer/Controls/ProgressIcon.cs | 2 +- .../WebsitePanel.Installer/Controls/ResultViewControl.cs | 2 +- .../Sources/WebsitePanel.Installer/Controls/ServerControl.cs | 2 +- .../Sources/WebsitePanel.Installer/Controls/ServersControl.cs | 2 +- .../Sources/WebsitePanel.Installer/Controls/ServiceControl.cs | 2 +- .../Sources/WebsitePanel.Installer/Controls/SettingsControl.cs | 2 +- .../Sources/WebsitePanel.Installer/Controls/TopLogoControl.cs | 2 +- .../Sources/WebsitePanel.Installer/Program.cs | 2 +- .../Sources/WebsitePanel.Installer/Properties/AssemblyInfo.cs | 2 +- .../Sources/WebsitePanel.Setup/Actions/BaseActionManager.cs | 2 +- .../WebsitePanel.Setup/Actions/EntServerActionManager.cs | 2 +- .../Sources/WebsitePanel.Setup/Actions/IInstallAction.cs | 2 +- .../WebsitePanel.Setup/Actions/IPrepareDefaultsAction.cs | 2 +- .../Sources/WebsitePanel.Setup/Actions/IPrerequisiteAction.cs | 2 +- .../Sources/WebsitePanel.Setup/Actions/IUninstallAction.cs | 2 +- .../Sources/WebsitePanel.Setup/Actions/ServerActionManager.cs | 2 +- .../WebsitePanel.Setup/Actions/StandaloneServerActionManager.cs | 2 +- .../WebsitePanel.Setup/Actions/WebPortalActionManager.cs | 2 +- WebsitePanel.Installer/Sources/WebsitePanel.Setup/BaseSetup.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/AppConfig.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/CRC32.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/ConfigurationCheck.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/CopyProcess.cs | 2 +- WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/ES.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/FileUtils.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/Global.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/InstallAction.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/InstallLog.cs | 2 +- WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Log.cs | 2 +- WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/OS.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/RegistryUtils.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/RollBack.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/RollBackProcess.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/SecurityEnums.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/SecurityUtils.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/ServerItem.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/SetupActions.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/SetupVariables.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/SqlProcess.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/SqlServerItem.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/SqlUtils.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/Utils.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/WebException.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/WebUtils.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/WmiHelper.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/XmlUtils.cs | 2 +- .../Sources/WebsitePanel.Setup/Common/ZipIndicator.cs | 2 +- .../Sources/WebsitePanel.Setup/EnterpriseServer.cs | 2 +- .../Sources/WebsitePanel.Setup/Forms/InstallerForm.cs | 2 +- WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal.cs | 2 +- .../Sources/WebsitePanel.Setup/Properties/AssemblyInfo.cs | 2 +- WebsitePanel.Installer/Sources/WebsitePanel.Setup/Server.cs | 2 +- .../Sources/WebsitePanel.Setup/StandaloneServerSetup.cs | 2 +- .../Sources/WebsitePanel.Setup/Web/AspNetVersion.cs | 2 +- .../Sources/WebsitePanel.Setup/Web/ServerBinding.cs | 2 +- .../Sources/WebsitePanel.Setup/Web/ServerState.cs | 2 +- .../Sources/WebsitePanel.Setup/Web/WebExtensionStatus.cs | 2 +- .../Sources/WebsitePanel.Setup/Web/WebSiteItem.cs | 2 +- .../Sources/WebsitePanel.Setup/Web/WebVirtualDirectoryItem.cs | 2 +- .../Sources/WebsitePanel.Setup/Windows/SystemUserItem.cs | 2 +- .../Sources/WebsitePanel.Setup/Wizard/BannerWizardPage.cs | 2 +- .../Sources/WebsitePanel.Setup/Wizard/ConfigurationCheckPage.cs | 2 +- .../Sources/WebsitePanel.Setup/Wizard/ConfirmUninstallPage.cs | 2 +- .../Sources/WebsitePanel.Setup/Wizard/DatabasePage.cs | 2 +- .../Sources/WebsitePanel.Setup/Wizard/ExpressInstallPage2.cs | 2 +- .../Sources/WebsitePanel.Setup/Wizard/FinishPage.cs | 2 +- .../Sources/WebsitePanel.Setup/Wizard/InstallFolderPage.cs | 2 +- .../Sources/WebsitePanel.Setup/Wizard/IntroductionPage.cs | 2 +- .../Sources/WebsitePanel.Setup/Wizard/LicenseAgreementPage.cs | 2 +- .../Sources/WebsitePanel.Setup/Wizard/MarginWizardPage.cs | 2 +- .../Sources/WebsitePanel.Setup/Wizard/RollBackPage.cs | 2 +- .../Sources/WebsitePanel.Setup/Wizard/SQLServersPage.cs | 2 +- .../WebsitePanel.Setup/Wizard/ServerAdminPasswordPage.cs | 2 +- .../Sources/WebsitePanel.Setup/Wizard/ServerPasswordPage.cs | 2 +- .../Sources/WebsitePanel.Setup/Wizard/ServiceAddressPage.cs | 2 +- .../Sources/WebsitePanel.Setup/Wizard/SetupCompletePage.cs | 2 +- .../Sources/WebsitePanel.Setup/Wizard/UninstallPage.cs | 2 +- .../Sources/WebsitePanel.Setup/Wizard/UrlPage.cs | 2 +- .../Sources/WebsitePanel.Setup/Wizard/UserAccountPage.cs | 2 +- .../Sources/WebsitePanel.Setup/Wizard/WebPage.cs | 2 +- .../Sources/WebsitePanel.Setup/Wizard/Wizard.cs | 2 +- .../Sources/WebsitePanel.Setup/Wizard/WizardPageBase.cs | 2 +- .../Sources/WebsitePanel.SilentInstaller/Program.cs | 2 +- .../WebsitePanel.SilentInstaller/Properties/AssemblyInfo.cs | 2 +- .../Sources/WebsitePanel.Updater/Common/FileUtils.cs | 2 +- .../Sources/WebsitePanel.Updater/Common/User32.cs | 2 +- .../Sources/WebsitePanel.Updater/Common/Utils.cs | 2 +- WebsitePanel.Installer/Sources/WebsitePanel.Updater/Program.cs | 2 +- .../Sources/WebsitePanel.Updater/Properties/AssemblyInfo.cs | 2 +- .../Sources/WebsitePanel.Updater/UpdaterForm.cs | 2 +- 108 files changed, 108 insertions(+), 108 deletions(-) diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/AppConfigManager.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/AppConfigManager.cs index fb4a411f..d10b29c0 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/AppConfigManager.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/AppConfigManager.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/AssemblyLoader.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/AssemblyLoader.cs index a80e7631..79180198 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/AssemblyLoader.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/AssemblyLoader.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/Global.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/Global.cs index 69df0978..95d2900a 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/Global.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/Global.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/Log.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/Log.cs index 9f8ee2ed..5e6a9b84 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/Log.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/Log.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/OS.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/OS.cs index c03b2d20..9146b457 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/OS.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/OS.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/RegistryUtils.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/RegistryUtils.cs index 1b4d13ae..32f52de2 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/RegistryUtils.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Common/RegistryUtils.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Configuration/ComponentCollection.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Configuration/ComponentCollection.cs index 00285ff1..353210c8 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Configuration/ComponentCollection.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Configuration/ComponentCollection.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Configuration/ComponentConfigElement.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Configuration/ComponentConfigElement.cs index 9dad79f9..bb8a95be 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Configuration/ComponentConfigElement.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Configuration/ComponentConfigElement.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Configuration/ConfigKeys.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Configuration/ConfigKeys.cs index dfebc930..705e3d52 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Configuration/ConfigKeys.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Configuration/ConfigKeys.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Configuration/InstallerSection.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Configuration/InstallerSection.cs index ad678b48..6a7c895f 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Configuration/InstallerSection.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/Configuration/InstallerSection.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/ServiceProviderProxy.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/ServiceProviderProxy.cs index 26884645..bebbfd30 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/ServiceProviderProxy.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer.Core/ServiceProviderProxy.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/ApplicationForm.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/ApplicationForm.cs index 75c23392..38c72590 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/ApplicationForm.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/ApplicationForm.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Common/AppContext.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Common/AppContext.cs index 89fbbc7d..c2b4111c 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Common/AppContext.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Common/AppContext.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Common/ProgressManager.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Common/ProgressManager.cs index c03f3e98..b00ec525 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Common/ProgressManager.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Common/ProgressManager.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Common/ScopeNode.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Common/ScopeNode.cs index c0a1f98a..66e2b6d8 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Common/ScopeNode.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Common/ScopeNode.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Common/User32.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Common/User32.cs index ffef6e32..76bf3baf 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Common/User32.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Common/User32.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Common/Utils.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Common/Utils.cs index d94f9863..12f011c2 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Common/Utils.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Common/Utils.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/LineBox.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/LineBox.cs index d9b581b4..97365a3c 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/LineBox.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/LineBox.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ProgressIcon.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ProgressIcon.cs index 99bd9de9..214c4884 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ProgressIcon.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ProgressIcon.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ResultViewControl.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ResultViewControl.cs index 47bec400..25d47756 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ResultViewControl.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ResultViewControl.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ServerControl.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ServerControl.cs index 242c4b72..a439d813 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ServerControl.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ServerControl.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ServersControl.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ServersControl.cs index 6aa328ec..05561608 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ServersControl.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ServersControl.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ServiceControl.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ServiceControl.cs index 7380d425..efc26c9c 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ServiceControl.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/ServiceControl.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/SettingsControl.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/SettingsControl.cs index 436b810f..afe76648 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/SettingsControl.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/SettingsControl.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/TopLogoControl.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/TopLogoControl.cs index d1f65db9..ef239bd7 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/TopLogoControl.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Controls/TopLogoControl.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Program.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Program.cs index 4843375d..a0bb0800 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Program.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Program.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Properties/AssemblyInfo.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Properties/AssemblyInfo.cs index 30bd80b6..87c09ded 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Properties/AssemblyInfo.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Properties/AssemblyInfo.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/BaseActionManager.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/BaseActionManager.cs index be9e41d4..d17a7dcb 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/BaseActionManager.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/BaseActionManager.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs index 917999db..6952cf21 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/EntServerActionManager.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/IInstallAction.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/IInstallAction.cs index e63e425e..a31b2366 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/IInstallAction.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/IInstallAction.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/IPrepareDefaultsAction.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/IPrepareDefaultsAction.cs index 66e8950b..2ba5e913 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/IPrepareDefaultsAction.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/IPrepareDefaultsAction.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/IPrerequisiteAction.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/IPrerequisiteAction.cs index 69ae916d..6bf3d610 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/IPrerequisiteAction.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/IPrerequisiteAction.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/IUninstallAction.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/IUninstallAction.cs index c101b090..5b7cc37c 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/IUninstallAction.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/IUninstallAction.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/ServerActionManager.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/ServerActionManager.cs index fc52568c..b65e7355 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/ServerActionManager.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/ServerActionManager.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/StandaloneServerActionManager.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/StandaloneServerActionManager.cs index daf1b2d7..308ed56c 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/StandaloneServerActionManager.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/StandaloneServerActionManager.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/WebPortalActionManager.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/WebPortalActionManager.cs index bec92b99..7d0ccdc3 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/WebPortalActionManager.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Actions/WebPortalActionManager.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/BaseSetup.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/BaseSetup.cs index cd54c042..e26a25d3 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/BaseSetup.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/BaseSetup.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/AppConfig.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/AppConfig.cs index 6f703a3a..15b376f6 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/AppConfig.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/AppConfig.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/CRC32.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/CRC32.cs index 5a87aab8..cd68aad6 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/CRC32.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/CRC32.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/ConfigurationCheck.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/ConfigurationCheck.cs index 3d6e03e7..2e2b6b0a 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/ConfigurationCheck.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/ConfigurationCheck.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/CopyProcess.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/CopyProcess.cs index a13f6e5b..27b75ec4 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/CopyProcess.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/CopyProcess.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/ES.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/ES.cs index db6da50d..76c8d659 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/ES.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/ES.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/FileUtils.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/FileUtils.cs index 628baacf..178f47db 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/FileUtils.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/FileUtils.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Global.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Global.cs index 522183d0..22556149 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Global.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Global.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/InstallAction.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/InstallAction.cs index 37db0eba..b7dc2fad 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/InstallAction.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/InstallAction.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/InstallLog.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/InstallLog.cs index 21584678..216b68f6 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/InstallLog.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/InstallLog.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Log.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Log.cs index 3b4191d4..1b1ce56b 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Log.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Log.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/OS.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/OS.cs index 826b0e96..2284c66f 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/OS.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/OS.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/RegistryUtils.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/RegistryUtils.cs index 15c899f0..033031e3 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/RegistryUtils.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/RegistryUtils.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/RollBack.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/RollBack.cs index 629df405..17830fe7 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/RollBack.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/RollBack.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/RollBackProcess.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/RollBackProcess.cs index 123a6493..1d22456d 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/RollBackProcess.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/RollBackProcess.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SecurityEnums.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SecurityEnums.cs index 3ffa1ff9..9659ee5d 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SecurityEnums.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SecurityEnums.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SecurityUtils.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SecurityUtils.cs index 6e2a328d..e69f9bbb 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SecurityUtils.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SecurityUtils.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/ServerItem.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/ServerItem.cs index 2bd8c376..ad4504f5 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/ServerItem.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/ServerItem.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SetupActions.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SetupActions.cs index 2781ea53..927165b8 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SetupActions.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SetupActions.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SetupVariables.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SetupVariables.cs index bd6635fd..43a96776 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SetupVariables.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SetupVariables.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SqlProcess.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SqlProcess.cs index a4ad6ad5..6790e3d6 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SqlProcess.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SqlProcess.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SqlServerItem.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SqlServerItem.cs index 490986db..370c60c2 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SqlServerItem.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SqlServerItem.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SqlUtils.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SqlUtils.cs index 927238f3..ce0ca360 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SqlUtils.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/SqlUtils.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Utils.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Utils.cs index 5c59fc1a..3bc41dba 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Utils.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Utils.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/WebException.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/WebException.cs index 0c5c9852..0b8b80d2 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/WebException.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/WebException.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/WebUtils.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/WebUtils.cs index a2183100..c3a92a05 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/WebUtils.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/WebUtils.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/WmiHelper.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/WmiHelper.cs index 6e8612c4..6f68e2ae 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/WmiHelper.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/WmiHelper.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/XmlUtils.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/XmlUtils.cs index 431fd032..5e754312 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/XmlUtils.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/XmlUtils.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/ZipIndicator.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/ZipIndicator.cs index 6c1bd6ea..bcb40334 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/ZipIndicator.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/ZipIndicator.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/EnterpriseServer.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/EnterpriseServer.cs index f7c0309e..98e769dd 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/EnterpriseServer.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/EnterpriseServer.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Forms/InstallerForm.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Forms/InstallerForm.cs index 2ebd1cbc..9dc7d0f6 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Forms/InstallerForm.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Forms/InstallerForm.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal.cs index 71056a9e..cada0de3 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Properties/AssemblyInfo.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Properties/AssemblyInfo.cs index ec7abd88..9df67ee8 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Properties/AssemblyInfo.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Properties/AssemblyInfo.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Server.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Server.cs index 9c81d81a..77ec0446 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Server.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Server.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/StandaloneServerSetup.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/StandaloneServerSetup.cs index 0d6c62b9..df83029b 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/StandaloneServerSetup.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/StandaloneServerSetup.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/AspNetVersion.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/AspNetVersion.cs index 9c71f3ec..0b5219bd 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/AspNetVersion.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/AspNetVersion.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/ServerBinding.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/ServerBinding.cs index 63960d28..0992eb5f 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/ServerBinding.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/ServerBinding.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/ServerState.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/ServerState.cs index 6bcf079a..cfdba0fc 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/ServerState.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/ServerState.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/WebExtensionStatus.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/WebExtensionStatus.cs index e71aab05..df954b1b 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/WebExtensionStatus.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/WebExtensionStatus.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/WebSiteItem.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/WebSiteItem.cs index 9eccab46..fb92ed4c 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/WebSiteItem.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/WebSiteItem.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/WebVirtualDirectoryItem.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/WebVirtualDirectoryItem.cs index 35d017ad..cfc867df 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/WebVirtualDirectoryItem.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Web/WebVirtualDirectoryItem.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Windows/SystemUserItem.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Windows/SystemUserItem.cs index 832d20b8..17ba54c8 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Windows/SystemUserItem.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Windows/SystemUserItem.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/BannerWizardPage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/BannerWizardPage.cs index 71d2134d..bcbf5840 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/BannerWizardPage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/BannerWizardPage.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ConfigurationCheckPage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ConfigurationCheckPage.cs index 470bda6c..7cb94dc0 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ConfigurationCheckPage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ConfigurationCheckPage.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ConfirmUninstallPage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ConfirmUninstallPage.cs index 6f096dbc..5aa40da0 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ConfirmUninstallPage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ConfirmUninstallPage.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/DatabasePage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/DatabasePage.cs index 63070ad3..134c9653 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/DatabasePage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/DatabasePage.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ExpressInstallPage2.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ExpressInstallPage2.cs index f2789427..5c02bb78 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ExpressInstallPage2.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ExpressInstallPage2.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/FinishPage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/FinishPage.cs index a53215e6..527b56f1 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/FinishPage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/FinishPage.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/InstallFolderPage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/InstallFolderPage.cs index bd38503d..77cfe1bf 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/InstallFolderPage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/InstallFolderPage.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/IntroductionPage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/IntroductionPage.cs index 6de25944..68fe4caa 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/IntroductionPage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/IntroductionPage.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/LicenseAgreementPage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/LicenseAgreementPage.cs index 8eaa8591..27ad0ab9 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/LicenseAgreementPage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/LicenseAgreementPage.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/MarginWizardPage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/MarginWizardPage.cs index 7e89dff8..9a2edf7c 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/MarginWizardPage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/MarginWizardPage.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/RollBackPage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/RollBackPage.cs index 26d38101..8020d4f1 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/RollBackPage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/RollBackPage.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/SQLServersPage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/SQLServersPage.cs index b38208af..0ccb270d 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/SQLServersPage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/SQLServersPage.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ServerAdminPasswordPage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ServerAdminPasswordPage.cs index 142093be..aebd2543 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ServerAdminPasswordPage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ServerAdminPasswordPage.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ServerPasswordPage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ServerPasswordPage.cs index 880da961..c3651972 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ServerPasswordPage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ServerPasswordPage.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ServiceAddressPage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ServiceAddressPage.cs index 1ceeae6d..5368c13a 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ServiceAddressPage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/ServiceAddressPage.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/SetupCompletePage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/SetupCompletePage.cs index 4a9c47ca..aed42e44 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/SetupCompletePage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/SetupCompletePage.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UninstallPage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UninstallPage.cs index c06e12cc..5df6124e 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UninstallPage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UninstallPage.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UrlPage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UrlPage.cs index 0c204399..12681cb2 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UrlPage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UrlPage.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UserAccountPage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UserAccountPage.cs index 80a233c6..c1a85f1f 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UserAccountPage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/UserAccountPage.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/WebPage.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/WebPage.cs index b9ee9ee8..0f78c132 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/WebPage.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/WebPage.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/Wizard.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/Wizard.cs index 26df6e0d..def9ab39 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/Wizard.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/Wizard.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/WizardPageBase.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/WizardPageBase.cs index 4c4cfec9..aa694969 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/WizardPageBase.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Wizard/WizardPageBase.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.SilentInstaller/Program.cs b/WebsitePanel.Installer/Sources/WebsitePanel.SilentInstaller/Program.cs index f1614bf0..76fbefd8 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.SilentInstaller/Program.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.SilentInstaller/Program.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.SilentInstaller/Properties/AssemblyInfo.cs b/WebsitePanel.Installer/Sources/WebsitePanel.SilentInstaller/Properties/AssemblyInfo.cs index 96bfd346..a0e938a7 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.SilentInstaller/Properties/AssemblyInfo.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.SilentInstaller/Properties/AssemblyInfo.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Updater/Common/FileUtils.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Updater/Common/FileUtils.cs index 8d88fae8..5d1e0fc2 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Updater/Common/FileUtils.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Updater/Common/FileUtils.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Updater/Common/User32.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Updater/Common/User32.cs index 833e1873..8a747e45 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Updater/Common/User32.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Updater/Common/User32.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Updater/Common/Utils.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Updater/Common/Utils.cs index 87b5114f..8fc29beb 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Updater/Common/Utils.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Updater/Common/Utils.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Updater/Program.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Updater/Program.cs index 584a20bb..b5feff89 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Updater/Program.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Updater/Program.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Updater/Properties/AssemblyInfo.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Updater/Properties/AssemblyInfo.cs index e2f0900a..c421e830 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Updater/Properties/AssemblyInfo.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Updater/Properties/AssemblyInfo.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Updater/UpdaterForm.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Updater/UpdaterForm.cs index 5afe47a3..3ffae895 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Updater/UpdaterForm.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Updater/UpdaterForm.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2011, Outercurve Foundation. +// Copyright (c) 2012, Outercurve Foundation. // All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, From 5b0180fecc7d89edff2f960242ca139c1d19cbfc Mon Sep 17 00:00:00 2001 From: ptsurbeleu Date: Wed, 15 Feb 2012 00:05:03 -0800 Subject: [PATCH 16/38] Corrected MSI output file name; Updater module refresh; --- .../Sources/Setup/Setup.vdproj | 162 +++++++----------- .../WebsitePanel.Installer/Updater.exe | Bin 199168 -> 199168 bytes 2 files changed, 59 insertions(+), 103 deletions(-) diff --git a/WebsitePanel.Installer/Sources/Setup/Setup.vdproj b/WebsitePanel.Installer/Sources/Setup/Setup.vdproj index 836c2919..c8bcd76d 100644 --- a/WebsitePanel.Installer/Sources/Setup/Setup.vdproj +++ b/WebsitePanel.Installer/Sources/Setup/Setup.vdproj @@ -33,24 +33,6 @@ } "Entry" { - "MsmKey" = "8:_3FE8A1704B90098231CE54C0A887C0F9" - "OwnerKey" = "8:_05F59A142DD147798C90054A203C0EE9" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_3FE8A1704B90098231CE54C0A887C0F9" - "OwnerKey" = "8:_EAE1EA76C9D31E75B8631E8C4E874282" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_3FE8A1704B90098231CE54C0A887C0F9" - "OwnerKey" = "8:_1239E87E938248B1BAF9BF75C32D3EDC" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { "MsmKey" = "8:_4BD2D475F25A409B9E2F96A9C0AD9283" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -63,20 +45,32 @@ } "Entry" { - "MsmKey" = "8:_5FD334A6C47943FA9A98232EA921C90B" + "MsmKey" = "8:_8358EC0621F48BC59677CAE4E2FA8FC3" "OwnerKey" = "8:_05F59A142DD147798C90054A203C0EE9" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_5FD334A6C47943FA9A98232EA921C90B" + "MsmKey" = "8:_8358EC0621F48BC59677CAE4E2FA8FC3" "OwnerKey" = "8:_1239E87E938248B1BAF9BF75C32D3EDC" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_5FD334A6C47943FA9A98232EA921C90B" - "OwnerKey" = "8:_CFB0AE8275767700870555C8CDA92C96" + "MsmKey" = "8:_B0491B1356193E1DEAF528DAD55FD861" + "OwnerKey" = "8:_05F59A142DD147798C90054A203C0EE9" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_B0491B1356193E1DEAF528DAD55FD861" + "OwnerKey" = "8:_1239E87E938248B1BAF9BF75C32D3EDC" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_B0491B1356193E1DEAF528DAD55FD861" + "OwnerKey" = "8:_8358EC0621F48BC59677CAE4E2FA8FC3" "MsmSig" = "8:_UNDEFINED" } "Entry" @@ -87,18 +81,6 @@ } "Entry" { - "MsmKey" = "8:_EAE1EA76C9D31E75B8631E8C4E874282" - "OwnerKey" = "8:_05F59A142DD147798C90054A203C0EE9" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_EAE1EA76C9D31E75B8631E8C4E874282" - "OwnerKey" = "8:_1239E87E938248B1BAF9BF75C32D3EDC" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_1239E87E938248B1BAF9BF75C32D3EDC" "MsmSig" = "8:_UNDEFINED" @@ -106,21 +88,21 @@ "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_3FE8A1704B90098231CE54C0A887C0F9" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_EAE1EA76C9D31E75B8631E8C4E874282" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_05F59A142DD147798C90054A203C0EE9" "MsmSig" = "8:_UNDEFINED" } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_8358EC0621F48BC59677CAE4E2FA8FC3" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_B0491B1356193E1DEAF528DAD55FD861" + "MsmSig" = "8:_UNDEFINED" + } } "Configurations" { @@ -129,7 +111,7 @@ "DisplayName" = "8:Debug" "IsDebugOnly" = "11:TRUE" "IsReleaseOnly" = "11:FALSE" - "OutputFilename" = "8:..\\..\\..\\WebsitePanel\\Deploy\\Debug\\WebsitePanelInstaller12.msi" + "OutputFilename" = "8:..\\..\\..\\WebsitePanel\\Deploy\\Debug\\WebsitePanelInstaller121.msi" "PackageFilesAs" = "3:2" "PackageFileSize" = "3:-2147483648" "CabType" = "3:1" @@ -171,7 +153,7 @@ "DisplayName" = "8:Release" "IsDebugOnly" = "11:FALSE" "IsReleaseOnly" = "11:TRUE" - "OutputFilename" = "8:..\\..\\..\\WebsitePanel\\Deploy\\Release\\WebsitePanelInstaller12.msi" + "OutputFilename" = "8:..\\..\\..\\WebsitePanel\\Deploy\\Release\\WebsitePanelInstaller121.msi" "PackageFilesAs" = "3:2" "PackageFileSize" = "3:-2147483648" "CabType" = "3:1" @@ -246,32 +228,6 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_3FE8A1704B90098231CE54C0A887C0F9" - { - "AssemblyRegister" = "3:1" - "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:Ionic.Zip.Reduced, Version=1.8.4.28, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c, processorArchitecture=MSIL" - "ScatterAssemblies" - { - } - "SourcePath" = "8:Ionic.Zip.Reduced.dll" - "TargetName" = "8:" - "Tag" = "8:" - "Folder" = "8:_E742E59BFE4D43C59AA65A07792B89FB" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4BD2D475F25A409B9E2F96A9C0AD9283" { "SourcePath" = "8:WebsitePanel Help.url" @@ -312,14 +268,40 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_5FD334A6C47943FA9A98232EA921C90B" + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_8358EC0621F48BC59677CAE4E2FA8FC3" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:WebsitePanel.Installer.Core, Version=1.2.1.0, Culture=neutral, processorArchitecture=MSIL" + "ScatterAssemblies" + { + } + "SourcePath" = "8:WebsitePanel.Installer.Core.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_E742E59BFE4D43C59AA65A07792B89FB" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_B0491B1356193E1DEAF528DAD55FD861" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:Ionic.Zip.Reduced, Version=1.8.4.28, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c, processorArchitecture=MSIL" "ScatterAssemblies" { - "_5FD334A6C47943FA9A98232EA921C90B" + "_B0491B1356193E1DEAF528DAD55FD861" { "Name" = "8:Ionic.Zip.Reduced.dll" "Attributes" = "3:512" @@ -363,32 +345,6 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_EAE1EA76C9D31E75B8631E8C4E874282" - { - "AssemblyRegister" = "3:1" - "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:WebsitePanel.Installer.Core, Version=1.2.0.0, Culture=neutral, processorArchitecture=MSIL" - "ScatterAssemblies" - { - } - "SourcePath" = "8:WebsitePanel.Installer.Core.dll" - "TargetName" = "8:" - "Tag" = "8:" - "Folder" = "8:_E742E59BFE4D43C59AA65A07792B89FB" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } } "FileType" { @@ -457,7 +413,7 @@ "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:WebsitePanel Installer" "ProductCode" = "8:{A22F374C-4AFC-4B5D-A509-7456A6107588}" - "PackageCode" = "8:{401F157D-6D55-4F66-A2C6-419F87BBF97D}" + "PackageCode" = "8:{62AE518E-85D1-4D7E-9642-660FB1794974}" "UpgradeCode" = "8:{2950A907-11E7-436C-86CE-049C414AFD08}" "AspNetVersion" = "8:4.0.30319.0" "RestartWWWService" = "11:FALSE" diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe index 92ddc22630d1e9da6330d7e5999a9c0563d452f7..019b3b7c9f30b0cde84ad0eff50c91c54b6e4a2d 100644 GIT binary patch delta 44 zcmZpe!qYH?XF>-P_lL%=)-J}aT}<~%1S|}eGkjIr>^0}n8_hue?9%NOrA!@D0G Date: Wed, 15 Feb 2012 00:51:59 -0800 Subject: [PATCH 17/38] Updated setup components with v1.2.1 requirement for the installer --- .../WebsitePanel.Setup/EnterpriseServer10.cs | 115 +++++++++------ .../Sources/WebsitePanel.Setup/Portal10.cs | 115 +++++++++------ .../Sources/WebsitePanel.Setup/Server10.cs | 137 +++++++++++------- .../StandaloneServerSetup10.cs | 55 ++++--- 4 files changed, 257 insertions(+), 165 deletions(-) diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/EnterpriseServer10.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/EnterpriseServer10.cs index f91c163e..07551895 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/EnterpriseServer10.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/EnterpriseServer10.cs @@ -6,58 +6,85 @@ using WebsitePanel.Setup.Actions; namespace WebsitePanel.Setup { - /// - /// Release 1.2.0 - /// - public class EnterpriseServer120 : EnterpriseServer - { - public static new object Install(object obj) - { - // - return EnterpriseServer.InstallBase(obj, "1.1.0"); - } + /// + /// Release 1.2.1 + /// + public class EnterpriseServer121 : EnterpriseServer + { + public static new object Install(object obj) + { + // + return EnterpriseServer.InstallBase(obj, "1.2.1"); + } - public static new DialogResult Uninstall(object obj) - { - return EnterpriseServer.Uninstall(obj); - } + public static new DialogResult Uninstall(object obj) + { + return EnterpriseServer.Uninstall(obj); + } - public static new DialogResult Setup(object obj) - { - return EnterpriseServer.Setup(obj); - } + public static new DialogResult Setup(object obj) + { + return EnterpriseServer.Setup(obj); + } - public static new DialogResult Update(object obj) - { + public static new DialogResult Update(object obj) + { + return UpdateBase(obj, "1.2.1", "1.2.0", true); + } + } + + /// + /// Release 1.2.0 + /// + public class EnterpriseServer120 : EnterpriseServer + { + public static new object Install(object obj) + { + // + return EnterpriseServer.InstallBase(obj, "1.1.0"); + } + + public static new DialogResult Uninstall(object obj) + { + return EnterpriseServer.Uninstall(obj); + } + + public static new DialogResult Setup(object obj) + { + return EnterpriseServer.Setup(obj); + } + + public static new DialogResult Update(object obj) + { return UpdateBase(obj, "1.2.0", "1.1.2,1.2.0", true, new InstallAction(ActionTypes.SwitchEntServer2AspNet40)); - } - } + } + } - /// - /// Release 1.1.0 - /// - public class EnterpriseServer110 : EnterpriseServer - { - public static new object Install(object obj) - { - return EnterpriseServer.InstallBase(obj, "1.1.0"); - } + /// + /// Release 1.1.0 + /// + public class EnterpriseServer110 : EnterpriseServer + { + public static new object Install(object obj) + { + return EnterpriseServer.InstallBase(obj, "1.1.0"); + } - public static new DialogResult Uninstall(object obj) - { - return EnterpriseServer.Uninstall(obj); - } + public static new DialogResult Uninstall(object obj) + { + return EnterpriseServer.Uninstall(obj); + } - public static new DialogResult Setup(object obj) - { - return EnterpriseServer.Setup(obj); - } + public static new DialogResult Setup(object obj) + { + return EnterpriseServer.Setup(obj); + } - public static new DialogResult Update(object obj) - { - return UpdateBase(obj, "1.1.0", "1.0.2", true); - } - } + public static new DialogResult Update(object obj) + { + return UpdateBase(obj, "1.1.0", "1.0.2", true); + } + } /// Release 1.0.2 /// diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal10.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal10.cs index 9924d6e4..01854e9b 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal10.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Portal10.cs @@ -6,58 +6,85 @@ using WebsitePanel.Setup.Actions; namespace WebsitePanel.Setup { - /// - /// Release 1.2.0 - /// - public class Portal120 : Portal - { - public static new object Install(object obj) - { - // - return Portal.InstallBase(obj, "1.1.0"); - } + /// + /// Release 1.2.1 + /// + public class Portal121 : Portal + { + public static new object Install(object obj) + { + // + return Portal.InstallBase(obj, "1.2.1"); + } - public static new DialogResult Uninstall(object obj) - { - return Portal.Uninstall(obj); - } + public static new DialogResult Uninstall(object obj) + { + return Portal.Uninstall(obj); + } - public static new DialogResult Setup(object obj) - { - return Portal.Setup(obj); - } + public static new DialogResult Setup(object obj) + { + return Portal.Setup(obj); + } - public static new DialogResult Update(object obj) - { + public static new DialogResult Update(object obj) + { + return UpdateBase(obj, "1.2.1", "1.2.0", false); + } + } + + /// + /// Release 1.2.0 + /// + public class Portal120 : Portal + { + public static new object Install(object obj) + { + // + return Portal.InstallBase(obj, "1.1.0"); + } + + public static new DialogResult Uninstall(object obj) + { + return Portal.Uninstall(obj); + } + + public static new DialogResult Setup(object obj) + { + return Portal.Setup(obj); + } + + public static new DialogResult Update(object obj) + { return UpdateBase(obj, "1.2.0", "1.1.2,1.2.0", false, new InstallAction(ActionTypes.SwitchWebPortal2AspNet40)); - } - } + } + } - /// - /// Release 1.1.0 - /// - public class Portal110 : Portal - { - public static new object Install(object obj) - { - return Portal.InstallBase(obj, "1.1.0"); - } + /// + /// Release 1.1.0 + /// + public class Portal110 : Portal + { + public static new object Install(object obj) + { + return Portal.InstallBase(obj, "1.1.0"); + } - public static new DialogResult Uninstall(object obj) - { - return Portal.Uninstall(obj); - } + public static new DialogResult Uninstall(object obj) + { + return Portal.Uninstall(obj); + } - public static new DialogResult Setup(object obj) - { - return Portal.Setup(obj); - } + public static new DialogResult Setup(object obj) + { + return Portal.Setup(obj); + } - public static new DialogResult Update(object obj) - { - return UpdateBase(obj, "1.1.0", "1.0.2", false, new InstallAction(ActionTypes.AddCustomErrorsPage)); - } - } + public static new DialogResult Update(object obj) + { + return UpdateBase(obj, "1.1.0", "1.0.2", false, new InstallAction(ActionTypes.AddCustomErrorsPage)); + } + } /// Release 1.0.2 /// public class Portal102 : Portal101 diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Server10.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Server10.cs index c333074b..bd63cb57 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Server10.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Server10.cs @@ -6,78 +6,105 @@ using WebsitePanel.Setup.Actions; namespace WebsitePanel.Setup { - /// - /// Release 1.2.0 - /// - public class Server120 : Server - { - public static new object Install(object obj) - { - // - return Server.InstallBase(obj, "1.1.0"); - } + /// + /// Release 1.2.1 + /// + public class Server121 : Server + { + public static new object Install(object obj) + { + // + return Server.InstallBase(obj, "1.2.1"); + } - public static new object Uninstall(object obj) - { - return Server.Uninstall(obj); - } + public static new object Uninstall(object obj) + { + return Server.Uninstall(obj); + } - public static new object Setup(object obj) - { - return Server.Setup(obj); - } + public static new object Setup(object obj) + { + return Server.Setup(obj); + } - public static new object Update(object obj) - { - return Server.UpdateBase(obj, "1.2.0", "1.1.2,1.2.0", false, new InstallAction(ActionTypes.SwitchServer2AspNet40)); - } - } + public static new object Update(object obj) + { + return Server.UpdateBase(obj, "1.2.1", "1.2.0", false); + } + } - /// - /// Release 1.1.0 - /// - public class Server110 : Server - { - public static new object Install(object obj) - { - return Server.InstallBase(obj, "1.1.0"); - } + /// + /// Release 1.2.0 + /// + public class Server120 : Server + { + public static new object Install(object obj) + { + // + return Server.InstallBase(obj, "1.1.0"); + } - public static new object Uninstall(object obj) - { - return Server.Uninstall(obj); - } + public static new object Uninstall(object obj) + { + return Server.Uninstall(obj); + } - public static new object Setup(object obj) - { - return Server.Setup(obj); - } + public static new object Setup(object obj) + { + return Server.Setup(obj); + } - public static new object Update(object obj) - { - return UpdateBase(obj, "1.1.0", "1.0.2", false); - } - } + public static new object Update(object obj) + { + return Server.UpdateBase(obj, "1.2.0", "1.1.2,1.2.0", false, new InstallAction(ActionTypes.SwitchServer2AspNet40)); + } + } + + /// + /// Release 1.1.0 + /// + public class Server110 : Server + { + public static new object Install(object obj) + { + return Server.InstallBase(obj, "1.1.0"); + } + + public static new object Uninstall(object obj) + { + return Server.Uninstall(obj); + } + + public static new object Setup(object obj) + { + return Server.Setup(obj); + } + + public static new object Update(object obj) + { + return UpdateBase(obj, "1.1.0", "1.0.2", false); + } + } /// Release 1.0.2 /// public class Server102 : Server101 { - public static new object Install(object obj) + public static new object Install(object obj) { return Server101.InstallBase(obj, "1.0.0"); } - public static new object Uninstall(object obj) + public static new object Uninstall(object obj) { return Server101.Uninstall(obj); } - public static new object Setup(object obj) + public static new object Setup(object obj) { return Server101.Setup(obj); } - public static new object Update(object obj) + public static new object Update(object obj) { return UpdateBase(obj, "1.0.0", "1.0.1", false); } @@ -88,22 +115,22 @@ namespace WebsitePanel.Setup /// public class Server101 : Server10 { - public static new object Install(object obj) + public static new object Install(object obj) { return Server10.InstallBase(obj, "1.0.0"); } - public static new object Uninstall(object obj) + public static new object Uninstall(object obj) { return Server10.Uninstall(obj); } - public static new object Setup(object obj) + public static new object Setup(object obj) { return Server10.Setup(obj); } - public static new object Update(object obj) + public static new object Update(object obj) { return UpdateBase(obj, "1.0.0", "1.0", false); } @@ -114,12 +141,12 @@ namespace WebsitePanel.Setup /// public class Server10 : Server { - public static new object Install(object obj) + public static new object Install(object obj) { return Server.InstallBase(obj, "1.0.0"); } - public static new object Uninstall(object obj) + public static new object Uninstall(object obj) { return Server.Uninstall(obj); } diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/StandaloneServerSetup10.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/StandaloneServerSetup10.cs index 801c6862..116f45c2 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/StandaloneServerSetup10.cs +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/StandaloneServerSetup10.cs @@ -5,34 +5,45 @@ using System.Windows.Forms; namespace WebsitePanel.Setup { - /// - /// Release 1.2.0 - /// - public class StandaloneServerSetup120 : StandaloneServerSetup - { - public static new object Install(object obj) - { - return StandaloneServerSetup.InstallBase(obj, "1.2.0"); - } - } + /// + /// Release 1.2.1 + /// + public class StandaloneServerSetup121 : StandaloneServerSetup + { + public static new object Install(object obj) + { + return StandaloneServerSetup.InstallBase(obj, "1.2.1"); + } + } - /// - /// Release 1.1.0 - /// - public class StandaloneServerSetup110 : StandaloneServerSetup - { - public static new object Install(object obj) - { - return StandaloneServerSetup.InstallBase(obj, "1.1.0"); - } - } + /// + /// Release 1.2.0 + /// + public class StandaloneServerSetup120 : StandaloneServerSetup + { + public static new object Install(object obj) + { + return StandaloneServerSetup.InstallBase(obj, "1.2.0"); + } + } + + /// + /// Release 1.1.0 + /// + public class StandaloneServerSetup110 : StandaloneServerSetup + { + public static new object Install(object obj) + { + return StandaloneServerSetup.InstallBase(obj, "1.1.0"); + } + } /// /// Release 1.0.2 /// public class StandaloneServerSetup102 : StandaloneServerSetup101 { - public static new object Install(object obj) + public static new object Install(object obj) { return StandaloneServerSetup.InstallBase(obj, "1.0.0"); } @@ -43,7 +54,7 @@ namespace WebsitePanel.Setup /// public class StandaloneServerSetup101 : StandaloneServerSetup { - public static new object Install(object obj) + public static new object Install(object obj) { return StandaloneServerSetup.InstallBase(obj, "1.0.0"); } From fb5a42e9c78993f3183c39fef3fa672a252c3813 Mon Sep 17 00:00:00 2001 From: feodor_fitsner Date: Mon, 20 Feb 2012 14:20:54 -0800 Subject: [PATCH 18/38] "WebsitePanel.Providers.Base", "WebsitePanel.Server.Utils", "WebsitePanel.Server", "WebsitePanel.Providers.HostedSolution" and "WebsitePanel.Providers.ExchangeHostedEdition" projects were retargeted to .NET 3.5 to support Exchange 2010 SP2 provider working in .NET 2.0 runtime. Fixed output paths for SmarterMail 7 and 9 providers. --- .../Sources/WebsitePanel.Installer/App.config | 2 +- .../WebsitePanel.Installer/Updater.exe | Bin 199168 -> 198144 bytes .../WebsitePanel.Providers.Base.csproj | 2 +- ...nel.Providers.ExchangeHostedEdition.csproj | 2 +- ...bsitePanel.Providers.HostedSolution.csproj | 22 +++++++++--------- ...tePanel.Providers.Mail.SmarterMail7.csproj | 2 +- ...tePanel.Providers.Mail.SmarterMail9.csproj | 2 +- .../WebsitePanel.Server.Utils.csproj | 2 +- .../Sources/WebsitePanel.Server/Web.config | 2 +- .../WebsitePanel.Server.csproj | 11 +-------- 10 files changed, 19 insertions(+), 28 deletions(-) diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/App.config b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/App.config index 18e7f2ee..60bc4b39 100644 --- a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/App.config +++ b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/App.config @@ -9,7 +9,7 @@ - + diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe b/WebsitePanel.Installer/Sources/WebsitePanel.Installer/Updater.exe index 019b3b7c9f30b0cde84ad0eff50c91c54b6e4a2d..9105eeef3bb49c3a4d2c266c1f99c21cb48f39cf 100644 GIT binary patch delta 42139 zcma%^30zdw`~S~5cQ%GahHVyRU_j6jK@e0HH8q#qm)v(yQE>wSOH-Rc4Xw1aYmSwc zm6es1hJ{v^m6?^6mgR?XP5$OBLXWU zREf%`uTLyllczWh7@MLAj@_+=Q^H97(L# z_@YdPtZc&Vs6xY#bI92r@|GE+GGQ_)UeR)Tl~u?{6^buh29VL!3Y%D4Fp}AXwIEK` zavpN$g{T&@XPC+(kiu%pIw#5_5ehd~qHPuBQF=aFd48?+ON6f(;uCz)P~k&In1sV; zBS4f%7JQEof16?eRS;`cEMzfiYY+>imZJhx;duF)n3K+)L2>9Bn^=hA4GHB5Fo=aH z-cUI}R>UsZ?{mnP$~B1b!NY{`15M#@QTbF;I6_ozZwg0>%H2)jSc9m1Hv~peBEo!56jLPoE368wv&Nci1{vqK7NLF22DBNgFi_TVx2zDQwVBF20AG?! zU^dgNh_wid&8)S_hdwZA!Q?5|w(mG9q_ywbw%g1$i=Ggjr6u$m^prNU51nPIN|t4X z*}}}_Xo%GoR{4+2D}};7G{qWgwOPxXBXD~f#Fq{!LPmac^7BI(# z+roYDGZms3b_z9Tw(#;uKkO}p90b!TL@^9>H*|pfL1C-}W4IK*G6zg*o|t21YZ1mY zwQbtZ#Cn_7kBX_xi=klU+3<_76k%er%0A@fCpUvd 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 TI2*yw4_X%$DZW+~^o#gkEg&WU delta 43110 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%0APA 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 z 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 U1HBMJ134QbW%i9!-96-g0a51Zp8x;= diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj index 0ad1b2b1..df882803 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj @@ -17,7 +17,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.ExchangeHostedEdition/WebsitePanel.Providers.ExchangeHostedEdition.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.ExchangeHostedEdition/WebsitePanel.Providers.ExchangeHostedEdition.csproj index b769f2bc..61fe1489 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.ExchangeHostedEdition/WebsitePanel.Providers.ExchangeHostedEdition.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.ExchangeHostedEdition/WebsitePanel.Providers.ExchangeHostedEdition.csproj @@ -10,7 +10,7 @@ Properties WebsitePanel.Providers.ExchangeHostedEdition WebsitePanel.Providers.ExchangeHostedEdition - v4.0 + v3.5 512 diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/WebsitePanel.Providers.HostedSolution.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/WebsitePanel.Providers.HostedSolution.csproj index 4381dc39..7d5b2014 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/WebsitePanel.Providers.HostedSolution.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/WebsitePanel.Providers.HostedSolution.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk @@ -145,16 +145,6 @@ - - - {684C932A-6C75-46AC-A327-F3689D89EB42} - WebsitePanel.Providers.Base - - - {E91E52F3-9555-4D00-B577-2B1DBDD87CA7} - WebsitePanel.Server.Utils - - @@ -175,6 +165,16 @@ true + + + {684C932A-6C75-46AC-A327-F3689D89EB42} + WebsitePanel.Providers.Base + + + {E91E52F3-9555-4D00-B577-2B1DBDD87CA7} + WebsitePanel.Server.Utils + + diff --git a/WebsitePanel/Sources/WebsitePanel.Server/WebsitePanel.Server.csproj b/WebsitePanel/Sources/WebsitePanel.Server/WebsitePanel.Server.csproj index 0dce2d8d..904a5b5b 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server/WebsitePanel.Server.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Server/WebsitePanel.Server.csproj @@ -16,7 +16,7 @@ 3.5 - v4.0 + v3.5 false @@ -54,7 +54,6 @@ - @@ -203,14 +202,6 @@ {684C932A-6C75-46AC-A327-F3689D89EB42} WebsitePanel.Providers.Base - - {64BEEB10-7F9F-4860-B2FF-84CDA02766B3} - WebsitePanel.Providers.VirtualizationForPC.HyperVForPC - - - {9BE0317D-E42E-4FF6-9A87-8C801F046EA1} - WebsitePanel.Providers.Web.IIs60 - {E91E52F3-9555-4D00-B577-2B1DBDD87CA7} WebsitePanel.Server.Utils From ff2ab4c5009347fe2a6cdbf77937ec8b62cd240e Mon Sep 17 00:00:00 2001 From: feodor_fitsner Date: Mon, 20 Feb 2012 14:23:24 -0800 Subject: [PATCH 19/38] Changed build.xml FileVersion and previous build path --- WebsitePanel/build.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WebsitePanel/build.xml b/WebsitePanel/build.xml index 97ad70b6..4ca4ad45 100644 --- a/WebsitePanel/build.xml +++ b/WebsitePanel/build.xml @@ -2,7 +2,7 @@ 1.2.1.0 - 1.2.1.0 + 1.2.1.2 1.2.1 2012-01-19 Release @@ -15,7 +15,7 @@ $(TrunkFolder)\Build\$(BuildConfiguration) $(TrunkFolder)\Deploy\$(BuildConfiguration) - C:\Projects\Sourceforge\WebsitePanel\Releases\1.1.2\Build\$(BuildConfiguration) + C:\Projects\WebsitePanel-1.2.0-distr\$(BuildConfiguration) $(TrunkFolder)\Tools\Diff.exe "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\sqlcmd.exe" -S (local)\SQLEXPRESS -E From 8a99080a90809418739fc1c578e8bf37d37a7b3a Mon Sep 17 00:00:00 2001 From: omara Date: Sun, 4 Mar 2012 15:12:25 -0500 Subject: [PATCH 20/38] Addressbook Policy Changes. Add Code to Create Rooms per Organization. --- .../ExchangeServerController.cs | 3 +- .../HostedSolution/IExchangeServer.cs | 2 +- .../HostedSolution/Organization.cs | 8 ++ .../Exchange2007.cs | 134 +++++++++++++++++- .../ExchangeTransaction.cs | 10 +- .../ExchangeServerProxy.cs | 13 +- .../ExchangeServer.asmx.cs | 4 +- 7 files changed, 157 insertions(+), 17 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/ExchangeServer/ExchangeServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/ExchangeServer/ExchangeServerController.cs index 28acd980..f3641624 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/ExchangeServer/ExchangeServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/ExchangeServer/ExchangeServerController.cs @@ -408,7 +408,7 @@ namespace WebsitePanel.EnterpriseServer // rollback organization creation if (organizationExtended) mailboxRole.DeleteOrganization(org.OrganizationId, org.DistinguishedName, - org.GlobalAddressList, org.AddressList, org.OfflineAddressBook, org.SecurityGroup); + org.GlobalAddressList, org.AddressList, org.RoomsAddressList, org.OfflineAddressBook, org.SecurityGroup); // rollback domain if (authDomainCreated) @@ -504,6 +504,7 @@ namespace WebsitePanel.EnterpriseServer org.DistinguishedName, org.GlobalAddressList, org.AddressList, + org.RoomsAddressList, org.OfflineAddressBook, org.SecurityGroup); diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/IExchangeServer.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/IExchangeServer.cs index c61011ba..04ec8aa9 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/IExchangeServer.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/IExchangeServer.cs @@ -45,7 +45,7 @@ namespace WebsitePanel.Providers.HostedSolution string GetOABVirtualDirectory(); Organization CreateOrganizationOfflineAddressBook(string organizationId, string securityGroup, string oabVirtualDir); void UpdateOrganizationOfflineAddressBook(string id); - bool DeleteOrganization(string organizationId, string distinguishedName, string globalAddressList, string addressList, string offlineAddressBook, string securityGroup); + bool DeleteOrganization(string organizationId, string distinguishedName, string globalAddressList, string addressList, string roomsAddressList, string offlineAddressBook, string securityGroup); void SetOrganizationStorageLimits(string organizationDistinguishedName, int issueWarningKB, int prohibitSendKB, int prohibitSendReceiveKB, int keepDeletedItemsDays); ExchangeItemStatistics[] GetMailboxesStatistics(string organizationDistinguishedName); diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/Organization.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/Organization.cs index 37c1d729..c320352b 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/Organization.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/Organization.cs @@ -39,6 +39,7 @@ namespace WebsitePanel.Providers.HostedSolution private string defaultDomain; private string offlineAddressBook; private string addressList; + private string roomsAddressList; private string globalAddressList; private string database; private string securityGroup; @@ -167,6 +168,13 @@ namespace WebsitePanel.Providers.HostedSolution set { addressList = value; } } + [Persistent] + public string RoomsAddressList + { + get { return roomsAddressList; } + set { roomsAddressList = value; } + } + [Persistent] public string GlobalAddressList { diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs index a056c350..c331b38e 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs @@ -184,11 +184,11 @@ namespace WebsitePanel.Providers.HostedSolution } public bool DeleteOrganization(string organizationId, string distinguishedName, - string globalAddressList, string addressList, string offlineAddressBook, + string globalAddressList, string addressList, string roomsAddressList, string offlineAddressBook, string securityGroup) { return DeleteOrganizationInternal(organizationId, distinguishedName, globalAddressList, - addressList, offlineAddressBook, securityGroup); + addressList, roomsAddressList, offlineAddressBook, securityGroup); } public void SetOrganizationStorageLimits(string organizationDistinguishedName, int issueWarningKB, int prohibitSendKB, @@ -618,7 +618,7 @@ namespace WebsitePanel.Providers.HostedSolution { Organization org = item as Organization; DeleteOrganization(org.OrganizationId, org.DistinguishedName, org.GlobalAddressList, - org.AddressList, org.OfflineAddressBook, org.SecurityGroup); + org.AddressList, org.RoomsAddressList, org.OfflineAddressBook, org.SecurityGroup); } else if (item is ExchangeDomain) { @@ -738,6 +738,12 @@ namespace WebsitePanel.Providers.HostedSolution ExchangeLog.LogInfo(" Address List: {0}", alId); UpdateAddressList(runSpace, alId, securityGroupPath); + //create RAL + string ralId = CreateRoomsAddressList(runSpace, organizationId); + transaction.RegisterNewRoomsAddressList(ralId); + ExchangeLog.LogInfo(" Rooms Address List: {0}", ralId); + UpdateRoomsAddressList(runSpace, ralId, securityGroupPath); + //create ActiveSync policy string asId = CreateActiveSyncPolicy(runSpace, organizationId); transaction.RegisterNewActiveSyncPolicy(asId); @@ -753,6 +759,7 @@ namespace WebsitePanel.Providers.HostedSolution info.AddressList = alId; info.GlobalAddressList = galId; + info.RoomsAddressList = ralId; info.OrganizationId = organizationId; info.Database = databaseId; @@ -904,7 +911,7 @@ namespace WebsitePanel.Providers.HostedSolution private bool DeleteOrganizationInternal(string organizationId, string distinguishedName, - string globalAddressList, string addressList, string offlineAddressBook, string securityGroup) + string globalAddressList, string addressList, string roomsAddressList, string offlineAddressBook, string securityGroup) { ExchangeLog.LogStart("DeleteOrganizationInternal"); bool ret = true; @@ -986,6 +993,18 @@ namespace WebsitePanel.Providers.HostedSolution ExchangeLog.LogError("Could not delete Address List " + addressList, ex); } + //delete RAL (Rooms Address List) + try + { + if (!string.IsNullOrEmpty(roomsAddressList)) + DeleteRoomsAddressList(runSpace, roomsAddressList); + } + catch (Exception ex) + { + ret = false; + ExchangeLog.LogError("Could not delete Rooms Address List " + roomsAddressList, ex); + } + //delete GAL try { @@ -4730,7 +4749,7 @@ namespace WebsitePanel.Providers.HostedSolution #endregion - #region Address Lists (GAL, AL, OAB, ABP) + #region Address Lists (GAL, AL, RAL, OAB, ABP) private string GetAddressListDN(Runspace runSpace, string id) { @@ -4744,7 +4763,7 @@ namespace WebsitePanel.Providers.HostedSolution resultObjectDN = this.GetResultObjectDN(result); ExchangeLog.DebugInfo("AL DN: {0}", new object[] { resultObjectDN }); } - ExchangeLog.LogEnd("GetAddressListDN"); + ExchangeLog.LogEnd("GetAddressListDN"); return resultObjectDN; } @@ -4824,6 +4843,99 @@ namespace WebsitePanel.Providers.HostedSolution ExchangeLog.LogEnd("DeleteAddressList"); } + private string GetRoomsAddressListDN(Runspace runSpace, string id) + { + ExchangeLog.LogStart("GetRoomsAddressListDN"); + string resultObjectDN = null; + Command cmd = new Command("Get-AddressList"); + cmd.Parameters.Add("Identity", id); + Collection result = this.ExecuteShellCommand(runSpace, cmd); + if ((result != null) && (result.Count > 0)) + { + resultObjectDN = this.GetResultObjectDN(result); + ExchangeLog.DebugInfo("RAL DN: {0}", new object[] { resultObjectDN }); + } + ExchangeLog.DebugInfo("GetRommsAddressListDN, cmd = {0}", cmd.CommandText); + ExchangeLog.LogEnd("GetRoomsAddressListDN"); + return resultObjectDN; + } + + private string CreateRoomsAddressList(Runspace runSpace, string organizationId) + { + ExchangeLog.LogStart("CreateRoomsAddressList"); + string roomsAddressListName = this.GetRoomsAddressListName(organizationId); + string roomsAddressListDN = this.GetRoomsAddressListDN(runSpace, roomsAddressListName); + if (!string.IsNullOrEmpty(roomsAddressListDN)) + { + //rooms address list already exists - we will use it + ExchangeLog.LogWarning("Rooms Address List '{0}' already exists", new object[] { roomsAddressListName }); + } + else + { + //try to create a new rooms address list (10 attempts) + int attempts = 0; + Command cmd = null; + Collection result = null; + + while (true) + { + try + { + //try to create address list + cmd = new Command("New-AddressList"); + cmd.Parameters.Add("Name", roomsAddressListName); + cmd.Parameters.Add("IncludedRecipients", "Resources"); + cmd.Parameters.Add("ConditionalCustomAttribute1", organizationId); + + result = ExecuteShellCommand(runSpace, cmd); + roomsAddressListDN = CheckResultObjectDN(result); + } + catch (Exception ex) + { + ExchangeLog.LogError(ex); + } + if (roomsAddressListDN != null) + break; + + if (attempts > 9) + throw new Exception( + string.Format("Could not create Rooms Address List '{0}' cmd = '{1}'", roomsAddressListName, cmd)); + + attempts++; + ExchangeLog.LogWarning("Attempt #{0} to create rooms address list failed!", attempts); + // wait 1 sec + System.Threading.Thread.Sleep(1000); + } + } + + ExchangeLog.LogEnd("CreateRoomsAddressList"); + return roomsAddressListDN; + } + + private void UpdateRoomsAddressList(Runspace runSpace, string id, string securityGroup) + { + ExchangeLog.LogStart("UpdateRoomsAddressList"); + + string path = AddADPrefix(id); + Command cmd = new Command("Update-AddressList"); + cmd.Parameters.Add("Identity", id); + ExecuteShellCommand(runSpace, cmd); + + AdjustADSecurity(path, securityGroup, false); + + ExchangeLog.LogEnd("UpdateRoomsAddressList"); + } + + private void DeleteRoomsAddressList(Runspace runSpace, string id) + { + ExchangeLog.LogStart("DeleteRoomsAddressList"); + Command cmd = new Command("Remove-AddressList"); + cmd.Parameters.Add("Identity", id); + cmd.Parameters.Add("Confirm", false); + ExecuteShellCommand(runSpace, cmd); + ExchangeLog.LogEnd("DeleteRoomsAddressList"); + } + private string GetGlobalAddressListDN(Runspace runSpace, string id) { ExchangeLog.LogStart("GetGlobalAddressListDN"); @@ -4945,7 +5057,7 @@ namespace WebsitePanel.Providers.HostedSolution string AL = GetAddressListName(organizationId); string GAL = GetGlobalAddressListName(organizationId); string OAB = GetOfflineAddressBookName(organizationId); - string RL = "All Rooms"; + string RL = GetRoomsAddressListName(organizationId); Command cmd = new Command("New-AddressBookPolicy"); cmd.Parameters.Add("Name", ABP); @@ -4991,6 +5103,11 @@ namespace WebsitePanel.Providers.HostedSolution return orgName + " Address Policy"; } + private string GetRoomsAddressListName(string orgName) + { + return orgName + " Rooms"; + } + #endregion #region Active Directory @@ -6596,6 +6713,9 @@ namespace WebsitePanel.Providers.HostedSolution case TransactionAction.TransactionActionTypes.CreateAddressList: DeleteAddressList(runspace, action.Id); break; + case TransactionAction.TransactionActionTypes.CreateRoomsAddressList: + DeleteRoomsAddressList(runspace, action.Id); + break; case TransactionAction.TransactionActionTypes.CreateOfflineAddressBook: DeleteOfflineAddressBook(runspace, action.Id); break; diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/ExchangeTransaction.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/ExchangeTransaction.cs index 7708ca78..ce9fbaf3 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/ExchangeTransaction.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/ExchangeTransaction.cs @@ -84,6 +84,13 @@ namespace WebsitePanel.Providers.HostedSolution action.Id = id; Actions.Add(action); } + internal void RegisterNewRoomsAddressList(string id) + { + TransactionAction action = new TransactionAction(); + action.ActionType = TransactionAction.TransactionActionTypes.CreateRoomsAddressList; + action.Id = id; + Actions.Add(action); + } internal void RegisterNewAddressPolicy(string id) { TransactionAction action = new TransactionAction(); @@ -241,7 +248,8 @@ namespace WebsitePanel.Providers.HostedSolution AddMailboxFullAccessPermission, AddSendAsPermission, RemoveMailboxFullAccessPermission, - RemoveSendAsPermission + RemoveSendAsPermission, + CreateRoomsAddressList }; } diff --git a/WebsitePanel/Sources/WebsitePanel.Server.Client/ExchangeServerProxy.cs b/WebsitePanel/Sources/WebsitePanel.Server.Client/ExchangeServerProxy.cs index 4a068fd8..c4e51d8f 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server.Client/ExchangeServerProxy.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server.Client/ExchangeServerProxy.cs @@ -770,24 +770,26 @@ namespace WebsitePanel.Providers.Exchange { /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/DeleteOrganization", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public bool DeleteOrganization(string organizationId, string distinguishedName, string globalAddressList, string addressList, string offlineAddressBook, string securityGroup) { + public bool DeleteOrganization(string organizationId, string distinguishedName, string globalAddressList, string addressList, string roomsAddressList, string offlineAddressBook, string securityGroup) { object[] results = this.Invoke("DeleteOrganization", new object[] { organizationId, distinguishedName, globalAddressList, addressList, + roomsAddressList, offlineAddressBook, securityGroup}); return ((bool)(results[0])); } /// - public System.IAsyncResult BeginDeleteOrganization(string organizationId, string distinguishedName, string globalAddressList, string addressList, string offlineAddressBook, string securityGroup, System.AsyncCallback callback, object asyncState) { + public System.IAsyncResult BeginDeleteOrganization(string organizationId, string distinguishedName, string globalAddressList, string addressList, string roomsAddressList, string offlineAddressBook, string securityGroup, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("DeleteOrganization", new object[] { organizationId, distinguishedName, globalAddressList, addressList, + roomsAddressList, offlineAddressBook, securityGroup}, callback, asyncState); } @@ -799,12 +801,12 @@ namespace WebsitePanel.Providers.Exchange { } /// - public void DeleteOrganizationAsync(string organizationId, string distinguishedName, string globalAddressList, string addressList, string offlineAddressBook, string securityGroup) { - this.DeleteOrganizationAsync(organizationId, distinguishedName, globalAddressList, addressList, offlineAddressBook, securityGroup, null); + public void DeleteOrganizationAsync(string organizationId, string distinguishedName, string globalAddressList, string addressList, string roomsAddressList, string offlineAddressBook, string securityGroup) { + this.DeleteOrganizationAsync(organizationId, distinguishedName, globalAddressList, addressList, roomsAddressList, offlineAddressBook, securityGroup, null); } /// - public void DeleteOrganizationAsync(string organizationId, string distinguishedName, string globalAddressList, string addressList, string offlineAddressBook, string securityGroup, object userState) { + public void DeleteOrganizationAsync(string organizationId, string distinguishedName, string globalAddressList, string addressList, string roomsAddressList, string offlineAddressBook, string securityGroup, object userState) { if ((this.DeleteOrganizationOperationCompleted == null)) { this.DeleteOrganizationOperationCompleted = new System.Threading.SendOrPostCallback(this.OnDeleteOrganizationOperationCompleted); } @@ -813,6 +815,7 @@ namespace WebsitePanel.Providers.Exchange { distinguishedName, globalAddressList, addressList, + roomsAddressList, offlineAddressBook, securityGroup}, this.DeleteOrganizationOperationCompleted, userState); } diff --git a/WebsitePanel/Sources/WebsitePanel.Server/ExchangeServer.asmx.cs b/WebsitePanel/Sources/WebsitePanel.Server/ExchangeServer.asmx.cs index 35740f42..53875d70 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server/ExchangeServer.asmx.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server/ExchangeServer.asmx.cs @@ -176,12 +176,12 @@ namespace WebsitePanel.Server } [WebMethod, SoapHeader("settings")] - public bool DeleteOrganization(string organizationId, string distinguishedName, string globalAddressList, string addressList, string offlineAddressBook, string securityGroup) + public bool DeleteOrganization(string organizationId, string distinguishedName, string globalAddressList, string addressList, string roomsAddressList, string offlineAddressBook, string securityGroup) { try { LogStart("DeleteOrganization"); - bool ret = ES.DeleteOrganization(organizationId, distinguishedName, globalAddressList, addressList, offlineAddressBook, securityGroup); + bool ret = ES.DeleteOrganization(organizationId, distinguishedName, globalAddressList, addressList, roomsAddressList, offlineAddressBook, securityGroup); LogEnd("DeleteOrganization"); return ret; } From 07d21775e93af5a8a3fc5f356a79e717f69231da Mon Sep 17 00:00:00 2001 From: feodor_fitsner Date: Mon, 5 Mar 2012 15:50:07 -0800 Subject: [PATCH 21/38] WSP Server projects re-targeted to .NET 3.5 to allow PowerShell to work in .NET 2.0 mode. This is required by Exchange 2010 SP2 module. --- WebsitePanel/Sources/VersionInfo.cs | 2 +- WebsitePanel/Sources/VersionInfo.vb | 2 +- .../WebsitePanel.Providers.DNS.Bind.csproj | 2 +- .../WebsitePanel.Providers.DNS.MsDNS.csproj | 2 +- .../WebsitePanel.Providers.DNS.Nettica.csproj | 2 +- ...WebsitePanel.Providers.DNS.PowerDNS.csproj | 7 +- ...ebsitePanel.Providers.DNS.SimpleDNS.csproj | 2 +- ...sitePanel.Providers.DNS.SimpleDNS50.csproj | 2 +- ...bsitePanel.Providers.Database.MySQL.csproj | 6 +- ...ePanel.Providers.Database.SqlServer.csproj | 2 +- ...ebsitePanel.Providers.FTP.FileZilla.csproj | 2 +- .../WebsitePanel.Providers.FTP.Gene6.csproj | 2 +- .../WebsitePanel.Providers.FTP.IIs60.csproj | 2 +- .../WebsitePanel.Providers.FTP.IIs70.csproj | 2 +- .../WebsitePanel.Providers.FTP.ServU.csproj | 2 +- ...el.Providers.Mail.AbilityMailServer.csproj | 2 +- .../My Project/Application.Designer.vb | 2 +- .../My Project/Resources.Designer.vb | 2 +- .../My Project/Settings.Designer.vb | 2 +- ...ebsitePanel.Providers.Mail.ArgoMail.vbproj | 2 +- .../My Project/Application.Designer.vb | 2 +- .../My Project/Resources.Designer.vb | 2 +- .../My Project/Settings.Designer.vb | 2 +- ...WebsitePanel.Providers.Mail.MDaemon.vbproj | 2 +- .../My Project/Application.Designer.vb | 2 +- .../My Project/Resources.Designer.vb | 2 +- .../My Project/Settings.Designer.vb | 2 +- ...sitePanel.Providers.Mail.MailEnable.vbproj | 2 +- .../My Project/Application.Designer.vb | 2 +- .../My Project/Resources.Designer.vb | 2 +- .../My Project/Settings.Designer.vb | 2 +- .../WebsitePanel.Providers.Mail.Merak.vbproj | 2 +- .../My Project/Application.Designer.vb | 2 +- .../My Project/Resources.Designer.vb | 2 +- .../My Project/Settings.Designer.vb | 2 +- ...WebsitePanel.Providers.Mail.Merak10.vbproj | 2 +- ...tePanel.Providers.Mail.SmarterMail2.csproj | 2 +- ...tePanel.Providers.Mail.SmarterMail3.csproj | 2 +- ...tePanel.Providers.Mail.SmarterMail5.csproj | 2 +- ...tePanel.Providers.Mail.SmarterMail6.csproj | 2 +- ...tePanel.Providers.Mail.SmarterMail7.csproj | 2 +- .../SmarterMail9.cs | 2 +- ...tePanel.Providers.Mail.SmarterMail9.csproj | 2 +- .../My Project/Application.Designer.vb | 2 +- .../My Project/Resources.Designer.vb | 2 +- .../My Project/Settings.Designer.vb | 2 +- ...tePanel.Providers.Mail.hMailServer5.vbproj | 2 +- .../My Project/Application.Designer.vb | 2 +- .../My Project/Resources.Designer.vb | 2 +- .../My Project/Settings.Designer.vb | 2 +- ...itePanel.Providers.Mail.hMailServer.vbproj | 2 +- .../My Project/Application.Designer.vb | 2 +- .../My Project/Resources.Designer.vb | 2 +- .../My Project/Settings.Designer.vb | 2 +- ...ePanel.Providers.Mail.hMailServer43.vbproj | 2 +- ...bsitePanel.Providers.OS.Windows2003.csproj | 2 +- ...bsitePanel.Providers.OS.Windows2008.csproj | 2 +- ...itePanel.Providers.SharePoint.Sps20.csproj | 2 +- ...itePanel.Providers.SharePoint.Sps30.csproj | 2 +- ...ePanel.Providers.Statistics.AWStats.csproj | 2 +- ...l.Providers.Statistics.SmarterStats.csproj | 2 +- .../HyperV.cs | 2 +- ...nel.Providers.Virtualization.HyperV.csproj | 2 +- .../HyperVForPC.cs | 23 ++-- .../MonitoringWebService/Reference.cs | 2 +- ...orPC.MonitoringWebService.Alert.datasource | 10 ++ ...rPC.MonitoringWebService.Device.datasource | 10 ++ ...ngWebService.ManagementPackRule.datasource | 10 ++ ...rvice.ManagementPackUnitMonitor.datasource | 10 ++ ...ngWebService.MonitorHealthState.datasource | 10 ++ ...onitoringWebService.MonitorInfo.datasource | 10 ++ ...oringWebService.MonitoredObject.datasource | 10 ++ ...ringWebService.MonitoringObject.datasource | 10 ++ ...ForPC.MonitoringWebService.Pack.datasource | 10 ++ ....PerformanceCounterCategoryInfo.datasource | 10 ++ ...oringWebService.PerformanceData.datasource | 10 ++ ...WebService.PerformanceDataValue.datasource | 10 ++ ...MonitoringWebService.TaskResult.datasource | 10 ++ ...C.MonitoringWebService.Template.datasource | 10 ++ ...toringWebService.WindowsService.datasource | 10 ++ .../SVMMService/Reference.cs | 2 +- ....SVMMService.GuestOSProfileInfo.datasource | 10 ++ ...SVMMService.HardwareProfileInfo.datasource | 10 ++ ...rPC.SVMMService.HostClusterInfo.datasource | 10 ++ ...nForPC.SVMMService.HostDiskInfo.datasource | 10 ++ ...ationForPC.SVMMService.HostInfo.datasource | 10 ++ ...orPC.SVMMService.HostVolumeInfo.datasource | 10 ++ ...zationForPC.SVMMService.ISOInfo.datasource | 10 ++ ...C.SVMMService.LibraryServerInfo.datasource | 10 ++ ...C.SVMMService.MemorySettingInfo.datasource | 10 ++ ...SVMMService.OperatingSystemInfo.datasource | 10 ++ ...C.SVMMService.ProcessorTypeInfo.datasource | 10 ++ ...ionForPC.SVMMService.ScriptInfo.datasource | 10 ++ ...ationForPC.SVMMService.TaskInfo.datasource | 10 ++ ...nForPC.SVMMService.TemplateInfo.datasource | 10 ++ ...PC.SVMMService.VMCheckpointInfo.datasource | 10 ++ ...PC.SVMMService.VMHostRatingInfo.datasource | 10 ++ ....SVMMService.VirtualCOMPortInfo.datasource | 10 ++ ...SVMMService.VirtualDVDDriveInfo.datasource | 10 ++ ...VMMService.VirtualDiskDriveInfo.datasource | 10 ++ ...SVMMService.VirtualHardDiskInfo.datasource | 10 ++ ....SVMMService.VirtualMachineInfo.datasource | 10 ++ ...rvice.VirtualNetworkAdapterInfo.datasource | 10 ++ ....SVMMService.VirtualNetworkInfo.datasource | 10 ++ ...MService.VirtualSCSIAdapterInfo.datasource | 10 ++ ...ers.VirtualizationForPC.HyperVForPC.csproj | 121 +++++++++++++++++- .../WebsitePanel.Providers.Web.IIs70.csproj | 2 +- .../WebApplicationGallery.cs | 2 +- .../WebsitePanel.Providers.Web.IIs60.csproj | 2 +- .../WebsitePanel.Server.Client.csproj | 2 +- WebsitePanel/build.xml | 2 +- 111 files changed, 597 insertions(+), 86 deletions(-) create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.Alert.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.Device.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.ManagementPackRule.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.ManagementPackUnitMonitor.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.MonitorHealthState.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.MonitorInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.MonitoredObject.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.MonitoringObject.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.Pack.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.PerformanceCounterCategoryInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.PerformanceData.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.PerformanceDataValue.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.TaskResult.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.Template.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.WindowsService.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.GuestOSProfileInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.HardwareProfileInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.HostClusterInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.HostDiskInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.HostInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.HostVolumeInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.ISOInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.LibraryServerInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.MemorySettingInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.OperatingSystemInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.ProcessorTypeInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.ScriptInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.TaskInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.TemplateInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VMCheckpointInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VMHostRatingInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualCOMPortInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualDVDDriveInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualDiskDriveInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualHardDiskInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualMachineInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualNetworkAdapterInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualNetworkInfo.datasource create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualSCSIAdapterInfo.datasource diff --git a/WebsitePanel/Sources/VersionInfo.cs b/WebsitePanel/Sources/VersionInfo.cs index 6b205aaa..bab95752 100644 --- a/WebsitePanel/Sources/VersionInfo.cs +++ b/WebsitePanel/Sources/VersionInfo.cs @@ -16,7 +16,7 @@ using System.Runtime.InteropServices; [assembly: AssemblyCompany("Outercurve Foundation")] [assembly: AssemblyCopyright("Copyright © 2011 Outercurve Foundation.")] [assembly: AssemblyVersion("1.2.1.0")] -[assembly: AssemblyFileVersion("1.2.1.0")] +[assembly: AssemblyFileVersion("1.2.1.3")] [assembly: AssemblyInformationalVersion("1.2.1")] diff --git a/WebsitePanel/Sources/VersionInfo.vb b/WebsitePanel/Sources/VersionInfo.vb index 2b17d8a4..63fbed4c 100644 --- a/WebsitePanel/Sources/VersionInfo.vb +++ b/WebsitePanel/Sources/VersionInfo.vb @@ -18,6 +18,6 @@ Imports System.Runtime.InteropServices diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.DNS.Bind/WebsitePanel.Providers.DNS.Bind.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.DNS.Bind/WebsitePanel.Providers.DNS.Bind.csproj index 78c8b5f9..9fe67ee7 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.DNS.Bind/WebsitePanel.Providers.DNS.Bind.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.DNS.Bind/WebsitePanel.Providers.DNS.Bind.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.DNS.MsDNS/WebsitePanel.Providers.DNS.MsDNS.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.DNS.MsDNS/WebsitePanel.Providers.DNS.MsDNS.csproj index 7a4971fd..fba353bf 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.DNS.MsDNS/WebsitePanel.Providers.DNS.MsDNS.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.DNS.MsDNS/WebsitePanel.Providers.DNS.MsDNS.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.DNS.Nettica/WebsitePanel.Providers.DNS.Nettica.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.DNS.Nettica/WebsitePanel.Providers.DNS.Nettica.csproj index 5c59e4a4..4d0c89aa 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.DNS.Nettica/WebsitePanel.Providers.DNS.Nettica.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.DNS.Nettica/WebsitePanel.Providers.DNS.Nettica.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.DNS.PowerDNS/WebsitePanel.Providers.DNS.PowerDNS.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.DNS.PowerDNS/WebsitePanel.Providers.DNS.PowerDNS.csproj index 244a23bb..d268e395 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.DNS.PowerDNS/WebsitePanel.Providers.DNS.PowerDNS.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.DNS.PowerDNS/WebsitePanel.Providers.DNS.PowerDNS.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk @@ -55,9 +55,8 @@ 618 - - False - ..\..\Lib\References\MySQL\MySql.Data.dll + + ..\..\..\..\..\Program Files (x86)\MySQL\Connector NET 6.3.7\Assemblies\v2.0\MySql.Data.dll diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.DNS.SimpleDNS/WebsitePanel.Providers.DNS.SimpleDNS.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.DNS.SimpleDNS/WebsitePanel.Providers.DNS.SimpleDNS.csproj index a37a6eec..7c9a4592 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.DNS.SimpleDNS/WebsitePanel.Providers.DNS.SimpleDNS.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.DNS.SimpleDNS/WebsitePanel.Providers.DNS.SimpleDNS.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.DNS.SimpleDNS50/WebsitePanel.Providers.DNS.SimpleDNS50.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.DNS.SimpleDNS50/WebsitePanel.Providers.DNS.SimpleDNS50.csproj index 8466a88d..67ad1b13 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.DNS.SimpleDNS50/WebsitePanel.Providers.DNS.SimpleDNS50.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.DNS.SimpleDNS50/WebsitePanel.Providers.DNS.SimpleDNS50.csproj @@ -10,7 +10,7 @@ Properties WebsitePanel.Providers.DNS WebsitePanel.Providers.DNS.SimpleDNS50 - v4.0 + v3.5 512 diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Database.MySQL/WebsitePanel.Providers.Database.MySQL.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Database.MySQL/WebsitePanel.Providers.Database.MySQL.csproj index 7b610d19..74fa14c7 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Database.MySQL/WebsitePanel.Providers.Database.MySQL.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Database.MySQL/WebsitePanel.Providers.Database.MySQL.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk @@ -55,9 +55,9 @@ 618 - + False - ..\..\Lib\References\MySQL\MySql.Data.dll + ..\..\..\..\..\Program Files (x86)\MySQL\Connector NET 6.3.7\Assemblies\v2.0\MySql.Data.dll diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Database.SqlServer/WebsitePanel.Providers.Database.SqlServer.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Database.SqlServer/WebsitePanel.Providers.Database.SqlServer.csproj index e5c7175d..59740a36 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Database.SqlServer/WebsitePanel.Providers.Database.SqlServer.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Database.SqlServer/WebsitePanel.Providers.Database.SqlServer.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.FileZilla/WebsitePanel.Providers.FTP.FileZilla.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.FileZilla/WebsitePanel.Providers.FTP.FileZilla.csproj index a5a3e39e..c61fcea4 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.FileZilla/WebsitePanel.Providers.FTP.FileZilla.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.FileZilla/WebsitePanel.Providers.FTP.FileZilla.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.Gene6/WebsitePanel.Providers.FTP.Gene6.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.Gene6/WebsitePanel.Providers.FTP.Gene6.csproj index 59fc8621..34942035 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.Gene6/WebsitePanel.Providers.FTP.Gene6.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.Gene6/WebsitePanel.Providers.FTP.Gene6.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs60/WebsitePanel.Providers.FTP.IIs60.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs60/WebsitePanel.Providers.FTP.IIs60.csproj index 8fc834a7..3e6c20f1 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs60/WebsitePanel.Providers.FTP.IIs60.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs60/WebsitePanel.Providers.FTP.IIs60.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs70/WebsitePanel.Providers.FTP.IIs70.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs70/WebsitePanel.Providers.FTP.IIs70.csproj index 7e070c6d..9ee5a2b5 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs70/WebsitePanel.Providers.FTP.IIs70.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.IIs70/WebsitePanel.Providers.FTP.IIs70.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.ServU/WebsitePanel.Providers.FTP.ServU.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.ServU/WebsitePanel.Providers.FTP.ServU.csproj index fe2bec60..b92c1067 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.FTP.ServU/WebsitePanel.Providers.FTP.ServU.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.FTP.ServU/WebsitePanel.Providers.FTP.ServU.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.AbilityMailServer/WebsitePanel.Providers.Mail.AbilityMailServer.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.AbilityMailServer/WebsitePanel.Providers.Mail.AbilityMailServer.csproj index bac23485..7f6276ff 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.AbilityMailServer/WebsitePanel.Providers.Mail.AbilityMailServer.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.AbilityMailServer/WebsitePanel.Providers.Mail.AbilityMailServer.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.ArgoMail/My Project/Application.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.ArgoMail/My Project/Application.Designer.vb index 9478349e..4ebb2ae8 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.ArgoMail/My Project/Application.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.ArgoMail/My Project/Application.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.ArgoMail/My Project/Resources.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.ArgoMail/My Project/Resources.Designer.vb index fc3591de..5180b70d 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.ArgoMail/My Project/Resources.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.ArgoMail/My Project/Resources.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.ArgoMail/My Project/Settings.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.ArgoMail/My Project/Settings.Designer.vb index 3b04ae69..576dda98 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.ArgoMail/My Project/Settings.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.ArgoMail/My Project/Settings.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.ArgoMail/WebsitePanel.Providers.Mail.ArgoMail.vbproj b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.ArgoMail/WebsitePanel.Providers.Mail.ArgoMail.vbproj index 6d691143..91d27f15 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.ArgoMail/WebsitePanel.Providers.Mail.ArgoMail.vbproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.ArgoMail/WebsitePanel.Providers.Mail.ArgoMail.vbproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MDaemon/My Project/Application.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MDaemon/My Project/Application.Designer.vb index 9478349e..4ebb2ae8 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MDaemon/My Project/Application.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MDaemon/My Project/Application.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MDaemon/My Project/Resources.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MDaemon/My Project/Resources.Designer.vb index fc3591de..5180b70d 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MDaemon/My Project/Resources.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MDaemon/My Project/Resources.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MDaemon/My Project/Settings.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MDaemon/My Project/Settings.Designer.vb index 3b04ae69..576dda98 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MDaemon/My Project/Settings.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MDaemon/My Project/Settings.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MDaemon/WebsitePanel.Providers.Mail.MDaemon.vbproj b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MDaemon/WebsitePanel.Providers.Mail.MDaemon.vbproj index bbd99129..fd91c7b4 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MDaemon/WebsitePanel.Providers.Mail.MDaemon.vbproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MDaemon/WebsitePanel.Providers.Mail.MDaemon.vbproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MailEnable/My Project/Application.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MailEnable/My Project/Application.Designer.vb index 9478349e..4ebb2ae8 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MailEnable/My Project/Application.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MailEnable/My Project/Application.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MailEnable/My Project/Resources.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MailEnable/My Project/Resources.Designer.vb index fc3591de..5180b70d 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MailEnable/My Project/Resources.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MailEnable/My Project/Resources.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MailEnable/My Project/Settings.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MailEnable/My Project/Settings.Designer.vb index 3b04ae69..576dda98 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MailEnable/My Project/Settings.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MailEnable/My Project/Settings.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MailEnable/WebsitePanel.Providers.Mail.MailEnable.vbproj b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MailEnable/WebsitePanel.Providers.Mail.MailEnable.vbproj index 00f2e1a0..0a3e858d 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MailEnable/WebsitePanel.Providers.Mail.MailEnable.vbproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.MailEnable/WebsitePanel.Providers.Mail.MailEnable.vbproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak/My Project/Application.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak/My Project/Application.Designer.vb index 9478349e..4ebb2ae8 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak/My Project/Application.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak/My Project/Application.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak/My Project/Resources.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak/My Project/Resources.Designer.vb index fc3591de..5180b70d 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak/My Project/Resources.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak/My Project/Resources.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak/My Project/Settings.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak/My Project/Settings.Designer.vb index 3b04ae69..576dda98 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak/My Project/Settings.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak/My Project/Settings.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak/WebsitePanel.Providers.Mail.Merak.vbproj b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak/WebsitePanel.Providers.Mail.Merak.vbproj index 69491aa8..90c1f3c5 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak/WebsitePanel.Providers.Mail.Merak.vbproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak/WebsitePanel.Providers.Mail.Merak.vbproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak10/My Project/Application.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak10/My Project/Application.Designer.vb index 9478349e..4ebb2ae8 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak10/My Project/Application.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak10/My Project/Application.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak10/My Project/Resources.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak10/My Project/Resources.Designer.vb index fc3591de..5180b70d 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak10/My Project/Resources.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak10/My Project/Resources.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak10/My Project/Settings.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak10/My Project/Settings.Designer.vb index 3b04ae69..576dda98 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak10/My Project/Settings.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak10/My Project/Settings.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak10/WebsitePanel.Providers.Mail.Merak10.vbproj b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak10/WebsitePanel.Providers.Mail.Merak10.vbproj index 57a11972..c0c196e0 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak10/WebsitePanel.Providers.Mail.Merak10.vbproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.Merak10/WebsitePanel.Providers.Mail.Merak10.vbproj @@ -11,7 +11,7 @@ WebsitePanel.Providers.Mail.Merak10 512 Windows - v4.0 + v3.5 On Binary Off diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail2/WebsitePanel.Providers.Mail.SmarterMail2.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail2/WebsitePanel.Providers.Mail.SmarterMail2.csproj index 5d9dd4bb..63f594af 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail2/WebsitePanel.Providers.Mail.SmarterMail2.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail2/WebsitePanel.Providers.Mail.SmarterMail2.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail3/WebsitePanel.Providers.Mail.SmarterMail3.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail3/WebsitePanel.Providers.Mail.SmarterMail3.csproj index f70f6b27..54fa9aa3 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail3/WebsitePanel.Providers.Mail.SmarterMail3.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail3/WebsitePanel.Providers.Mail.SmarterMail3.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail5/WebsitePanel.Providers.Mail.SmarterMail5.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail5/WebsitePanel.Providers.Mail.SmarterMail5.csproj index 28a91e47..4710aca1 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail5/WebsitePanel.Providers.Mail.SmarterMail5.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail5/WebsitePanel.Providers.Mail.SmarterMail5.csproj @@ -10,7 +10,7 @@ Properties WebsitePanel.Providers.Mail WebsitePanel.Providers.Mail.SmarterMail5 - v4.0 + v3.5 512 diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail6/WebsitePanel.Providers.Mail.SmarterMail6.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail6/WebsitePanel.Providers.Mail.SmarterMail6.csproj index 38de11a1..f51843d2 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail6/WebsitePanel.Providers.Mail.SmarterMail6.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail6/WebsitePanel.Providers.Mail.SmarterMail6.csproj @@ -10,7 +10,7 @@ Properties WebsitePanel.Providers.Mail WebsitePanel.Providers.Mail.SmarterMail6 - v4.0 + v3.5 512 diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail7/WebsitePanel.Providers.Mail.SmarterMail7.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail7/WebsitePanel.Providers.Mail.SmarterMail7.csproj index 3dfeab7c..5714a35a 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail7/WebsitePanel.Providers.Mail.SmarterMail7.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail7/WebsitePanel.Providers.Mail.SmarterMail7.csproj @@ -10,7 +10,7 @@ Properties WebsitePanel.Providers.Mail WebsitePanel.Providers.Mail.SmarterMail7 - v4.0 + v3.5 512 diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail9/SmarterMail9.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail9/SmarterMail9.cs index fa41ee53..c5d043de 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail9/SmarterMail9.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail9/SmarterMail9.cs @@ -1990,7 +1990,7 @@ namespace WebsitePanel.Providers.Mail settings.Add(string.Concat("disablelistcommand=", list.DisableListcommand)); settings.Add(string.Concat("disablesubscribecommand=", list.DisableSubscribecommand)); - Log.WriteWarning(string.Join(" , ", settings)); + Log.WriteWarning(string.Join(" , ", settings.ToArray())); GenericResult result = lists.SetRequestedListSettings(AdminUsername, AdminPassword, domain, diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail9/WebsitePanel.Providers.Mail.SmarterMail9.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail9/WebsitePanel.Providers.Mail.SmarterMail9.csproj index a02af8ff..be13228c 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail9/WebsitePanel.Providers.Mail.SmarterMail9.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.SmarterMail9/WebsitePanel.Providers.Mail.SmarterMail9.csproj @@ -10,7 +10,7 @@ Properties WebsitePanel.Providers.Mail WebsitePanel.Providers.Mail.SmarterMail9 - v4.0 + v3.5 512 diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMail5/My Project/Application.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMail5/My Project/Application.Designer.vb index 9478349e..4ebb2ae8 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMail5/My Project/Application.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMail5/My Project/Application.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMail5/My Project/Resources.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMail5/My Project/Resources.Designer.vb index fc3591de..5180b70d 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMail5/My Project/Resources.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMail5/My Project/Resources.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMail5/My Project/Settings.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMail5/My Project/Settings.Designer.vb index 3b04ae69..576dda98 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMail5/My Project/Settings.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMail5/My Project/Settings.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMail5/WebsitePanel.Providers.Mail.hMailServer5.vbproj b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMail5/WebsitePanel.Providers.Mail.hMailServer5.vbproj index b5c4fd2b..3a556d7c 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMail5/WebsitePanel.Providers.Mail.hMailServer5.vbproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMail5/WebsitePanel.Providers.Mail.hMailServer5.vbproj @@ -11,7 +11,7 @@ WebsitePanel.Providers.Mail.hMailServer5 512 Windows - v4.0 + v3.5 On Binary Off diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer/My Project/Application.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer/My Project/Application.Designer.vb index 9478349e..4ebb2ae8 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer/My Project/Application.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer/My Project/Application.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer/My Project/Resources.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer/My Project/Resources.Designer.vb index fc3591de..5180b70d 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer/My Project/Resources.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer/My Project/Resources.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer/My Project/Settings.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer/My Project/Settings.Designer.vb index 3b04ae69..576dda98 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer/My Project/Settings.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer/My Project/Settings.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer/WebsitePanel.Providers.Mail.hMailServer.vbproj b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer/WebsitePanel.Providers.Mail.hMailServer.vbproj index a8c68da3..9651e55b 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer/WebsitePanel.Providers.Mail.hMailServer.vbproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer/WebsitePanel.Providers.Mail.hMailServer.vbproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer43/My Project/Application.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer43/My Project/Application.Designer.vb index 9478349e..4ebb2ae8 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer43/My Project/Application.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer43/My Project/Application.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer43/My Project/Resources.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer43/My Project/Resources.Designer.vb index fc3591de..5180b70d 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer43/My Project/Resources.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer43/My Project/Resources.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer43/My Project/Settings.Designer.vb b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer43/My Project/Settings.Designer.vb index 3b04ae69..576dda98 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer43/My Project/Settings.Designer.vb +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer43/My Project/Settings.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.239 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer43/WebsitePanel.Providers.Mail.hMailServer43.vbproj b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer43/WebsitePanel.Providers.Mail.hMailServer43.vbproj index 66435a4d..9d3ab693 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer43/WebsitePanel.Providers.Mail.hMailServer43.vbproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Mail.hMailServer43/WebsitePanel.Providers.Mail.hMailServer43.vbproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2003/WebsitePanel.Providers.OS.Windows2003.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2003/WebsitePanel.Providers.OS.Windows2003.csproj index 3a6589a6..b581a4ef 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2003/WebsitePanel.Providers.OS.Windows2003.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2003/WebsitePanel.Providers.OS.Windows2003.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2008/WebsitePanel.Providers.OS.Windows2008.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2008/WebsitePanel.Providers.OS.Windows2008.csproj index 88c64b87..79f073aa 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2008/WebsitePanel.Providers.OS.Windows2008.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2008/WebsitePanel.Providers.OS.Windows2008.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.SharePoint.Sps20/WebsitePanel.Providers.SharePoint.Sps20.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.SharePoint.Sps20/WebsitePanel.Providers.SharePoint.Sps20.csproj index 318027c1..1c14a584 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.SharePoint.Sps20/WebsitePanel.Providers.SharePoint.Sps20.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.SharePoint.Sps20/WebsitePanel.Providers.SharePoint.Sps20.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.SharePoint.Sps30/WebsitePanel.Providers.SharePoint.Sps30.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.SharePoint.Sps30/WebsitePanel.Providers.SharePoint.Sps30.csproj index 52bdec4f..96eac253 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.SharePoint.Sps30/WebsitePanel.Providers.SharePoint.Sps30.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.SharePoint.Sps30/WebsitePanel.Providers.SharePoint.Sps30.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Statistics.AWStats/WebsitePanel.Providers.Statistics.AWStats.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Statistics.AWStats/WebsitePanel.Providers.Statistics.AWStats.csproj index 7cb80568..2c456b9a 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Statistics.AWStats/WebsitePanel.Providers.Statistics.AWStats.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Statistics.AWStats/WebsitePanel.Providers.Statistics.AWStats.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Statistics.SmarterStats/WebsitePanel.Providers.Statistics.SmarterStats.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Statistics.SmarterStats/WebsitePanel.Providers.Statistics.SmarterStats.csproj index 5ea8b096..b3326fd6 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Statistics.SmarterStats/WebsitePanel.Providers.Statistics.SmarterStats.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Statistics.SmarterStats/WebsitePanel.Providers.Statistics.SmarterStats.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV/HyperV.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV/HyperV.cs index 968be08d..7ac474f5 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV/HyperV.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV/HyperV.cs @@ -2496,7 +2496,7 @@ exit", Convert.ToInt32(objDisk["Index"]))); #region Hyper-V Cloud public bool CheckServerState(string connString) { - return !String.IsNullOrWhiteSpace(connString); + return !String.IsNullOrEmpty(connString); } #endregion Hyper-V Cloud } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV/WebsitePanel.Providers.Virtualization.HyperV.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV/WebsitePanel.Providers.Virtualization.HyperV.csproj index b61e706d..db4b6ea8 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV/WebsitePanel.Providers.Virtualization.HyperV.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperV/WebsitePanel.Providers.Virtualization.HyperV.csproj @@ -10,7 +10,7 @@ Properties WebsitePanel.Providers.Virtualization WebsitePanel.Providers.Virtualization.HyperV - v4.0 + v3.5 512 diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/HyperVForPC.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/HyperVForPC.cs index 5fb2e918..e901dbd9 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/HyperVForPC.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/HyperVForPC.cs @@ -634,7 +634,7 @@ namespace WebsitePanel.Providers.VirtualizationForPC { try { - hostInfo = client.GetHostByName(String.IsNullOrWhiteSpace(ServerNameSettings) + hostInfo = client.GetHostByName(IsNullOrWhiteSpaceString(ServerNameSettings) ? selTemplate.HostName : ServerNameSettings); } catch (Exception ex) @@ -1593,8 +1593,8 @@ namespace WebsitePanel.Providers.VirtualizationForPC { case VMForPCSettingsName.SCVMMServer: { - if (!String.IsNullOrWhiteSpace(connString) - && !String.IsNullOrWhiteSpace(connName)) + if (!IsNullOrWhiteSpaceString(connString) + && !IsNullOrWhiteSpaceString(connName)) { EndpointAddress endPointAddress = GetEndPointAddress(connString, connName); @@ -1609,8 +1609,8 @@ namespace WebsitePanel.Providers.VirtualizationForPC } case VMForPCSettingsName.SCOMServer: { - if (!String.IsNullOrWhiteSpace(connString) - && !String.IsNullOrWhiteSpace(connName)) + if (!IsNullOrWhiteSpaceString(connString) + && !IsNullOrWhiteSpaceString(connName)) { EndpointAddress endPointAddress = GetEndPointAddress(connString, connName); @@ -1845,8 +1845,8 @@ namespace WebsitePanel.Providers.VirtualizationForPC { WSPVirtualMachineManagementServiceClient ret; - if (!String.IsNullOrWhiteSpace(SCVMMServer) - && !String.IsNullOrWhiteSpace(SCVMMPrincipalName)) + if (!IsNullOrWhiteSpaceString(SCVMMServer) + && !IsNullOrWhiteSpaceString(SCVMMPrincipalName)) { EndpointAddress endPointAddress = GetEndPointAddress(SCVMMServer, SCVMMPrincipalName); @@ -1866,8 +1866,8 @@ namespace WebsitePanel.Providers.VirtualizationForPC { WSPMonitoringServiceClient ret; - if (!String.IsNullOrWhiteSpace(SCOMServer) - && !String.IsNullOrWhiteSpace(SCOMPrincipalName)) + if (!IsNullOrWhiteSpaceString(SCOMServer) + && !IsNullOrWhiteSpaceString(SCOMPrincipalName)) { EndpointAddress endPointAddress = GetEndPointAddress(SCOMServer, SCOMPrincipalName); @@ -2047,5 +2047,10 @@ namespace WebsitePanel.Providers.VirtualizationForPC { throw new NotImplementedException(); } + + private bool IsNullOrWhiteSpaceString(string value) + { + return String.IsNullOrEmpty(value) || (value.Trim().Length == 0); + } } } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/Reference.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/Reference.cs index 0bad6b97..8caf5210 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/Reference.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/Reference.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.1 +// Runtime Version:4.0.30319.239 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.Alert.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.Alert.datasource new file mode 100644 index 00000000..93960482 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.Alert.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.Alert, Service References.MonitoringWebService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.Device.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.Device.datasource new file mode 100644 index 00000000..cc39e578 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.Device.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.Device, Service References.MonitoringWebService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.ManagementPackRule.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.ManagementPackRule.datasource new file mode 100644 index 00000000..0cd964a8 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.ManagementPackRule.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.ManagementPackRule, Service References.MonitoringWebService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.ManagementPackUnitMonitor.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.ManagementPackUnitMonitor.datasource new file mode 100644 index 00000000..a282b1e2 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.ManagementPackUnitMonitor.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.ManagementPackUnitMonitor, Service References.MonitoringWebService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.MonitorHealthState.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.MonitorHealthState.datasource new file mode 100644 index 00000000..5bcee5bb --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.MonitorHealthState.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.MonitorHealthState, Service References.MonitoringWebService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.MonitorInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.MonitorInfo.datasource new file mode 100644 index 00000000..df423aa4 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.MonitorInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.MonitorInfo, Service References.MonitoringWebService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.MonitoredObject.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.MonitoredObject.datasource new file mode 100644 index 00000000..a23b9723 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.MonitoredObject.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.MonitoredObject, Service References.MonitoringWebService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.MonitoringObject.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.MonitoringObject.datasource new file mode 100644 index 00000000..dd8b6a7a --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.MonitoringObject.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.MonitoringObject, Service References.MonitoringWebService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.Pack.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.Pack.datasource new file mode 100644 index 00000000..6704b618 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.Pack.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.Pack, Service References.MonitoringWebService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.PerformanceCounterCategoryInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.PerformanceCounterCategoryInfo.datasource new file mode 100644 index 00000000..39bb53eb --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.PerformanceCounterCategoryInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.PerformanceCounterCategoryInfo, Service References.MonitoringWebService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.PerformanceData.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.PerformanceData.datasource new file mode 100644 index 00000000..ae2a0728 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.PerformanceData.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.PerformanceData, Service References.MonitoringWebService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.PerformanceDataValue.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.PerformanceDataValue.datasource new file mode 100644 index 00000000..a9732b55 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.PerformanceDataValue.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.PerformanceDataValue, Service References.MonitoringWebService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.TaskResult.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.TaskResult.datasource new file mode 100644 index 00000000..a5ac18e1 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.TaskResult.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.TaskResult, Service References.MonitoringWebService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.Template.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.Template.datasource new file mode 100644 index 00000000..7a227326 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.Template.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.Template, Service References.MonitoringWebService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.WindowsService.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.WindowsService.datasource new file mode 100644 index 00000000..6402a689 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/MonitoringWebService/WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.WindowsService.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.MonitoringWebService.WindowsService, Service References.MonitoringWebService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/Reference.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/Reference.cs index b4626972..7d8054d7 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/Reference.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/Reference.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.1 +// Runtime Version:4.0.30319.239 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.GuestOSProfileInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.GuestOSProfileInfo.datasource new file mode 100644 index 00000000..dddad981 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.GuestOSProfileInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.GuestOSProfileInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.HardwareProfileInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.HardwareProfileInfo.datasource new file mode 100644 index 00000000..be75d03f --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.HardwareProfileInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.HardwareProfileInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.HostClusterInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.HostClusterInfo.datasource new file mode 100644 index 00000000..105c734d --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.HostClusterInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.HostClusterInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.HostDiskInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.HostDiskInfo.datasource new file mode 100644 index 00000000..3dc2cf48 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.HostDiskInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.HostDiskInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.HostInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.HostInfo.datasource new file mode 100644 index 00000000..b55d3424 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.HostInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.HostInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.HostVolumeInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.HostVolumeInfo.datasource new file mode 100644 index 00000000..4ca0719a --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.HostVolumeInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.HostVolumeInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.ISOInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.ISOInfo.datasource new file mode 100644 index 00000000..529da350 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.ISOInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.ISOInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.LibraryServerInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.LibraryServerInfo.datasource new file mode 100644 index 00000000..441d4c71 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.LibraryServerInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.LibraryServerInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.MemorySettingInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.MemorySettingInfo.datasource new file mode 100644 index 00000000..c00fc773 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.MemorySettingInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.MemorySettingInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.OperatingSystemInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.OperatingSystemInfo.datasource new file mode 100644 index 00000000..e82e14e2 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.OperatingSystemInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.OperatingSystemInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.ProcessorTypeInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.ProcessorTypeInfo.datasource new file mode 100644 index 00000000..afa91819 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.ProcessorTypeInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.ProcessorTypeInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.ScriptInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.ScriptInfo.datasource new file mode 100644 index 00000000..0e67484e --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.ScriptInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.ScriptInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.TaskInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.TaskInfo.datasource new file mode 100644 index 00000000..cd768ced --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.TaskInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.TaskInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.TemplateInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.TemplateInfo.datasource new file mode 100644 index 00000000..ea3bdd6a --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.TemplateInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.TemplateInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VMCheckpointInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VMCheckpointInfo.datasource new file mode 100644 index 00000000..db09cda0 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VMCheckpointInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.VMCheckpointInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VMHostRatingInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VMHostRatingInfo.datasource new file mode 100644 index 00000000..488a5356 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VMHostRatingInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.VMHostRatingInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualCOMPortInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualCOMPortInfo.datasource new file mode 100644 index 00000000..0bc68451 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualCOMPortInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualCOMPortInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualDVDDriveInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualDVDDriveInfo.datasource new file mode 100644 index 00000000..13541360 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualDVDDriveInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualDVDDriveInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualDiskDriveInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualDiskDriveInfo.datasource new file mode 100644 index 00000000..27fd281d --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualDiskDriveInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualDiskDriveInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualHardDiskInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualHardDiskInfo.datasource new file mode 100644 index 00000000..7b6ebbf9 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualHardDiskInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualHardDiskInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualMachineInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualMachineInfo.datasource new file mode 100644 index 00000000..38b520e7 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualMachineInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualMachineInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualNetworkAdapterInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualNetworkAdapterInfo.datasource new file mode 100644 index 00000000..85d24eff --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualNetworkAdapterInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualNetworkAdapterInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualNetworkInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualNetworkInfo.datasource new file mode 100644 index 00000000..def9ce62 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualNetworkInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualNetworkInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualSCSIAdapterInfo.datasource b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualSCSIAdapterInfo.datasource new file mode 100644 index 00000000..a9cbe461 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/Service References/SVMMService/WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualSCSIAdapterInfo.datasource @@ -0,0 +1,10 @@ + + + + WebsitePanel.Providers.VirtualizationForPC.SVMMService.VirtualSCSIAdapterInfo, Service References.SVMMService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/WebsitePanel.Providers.VirtualizationForPC.HyperVForPC.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/WebsitePanel.Providers.VirtualizationForPC.HyperVForPC.csproj index a5cbf32e..b4b1c56b 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/WebsitePanel.Providers.VirtualizationForPC.HyperVForPC.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Virtualization.HyperVForPC/WebsitePanel.Providers.VirtualizationForPC.HyperVForPC.csproj @@ -10,8 +10,9 @@ Properties WebsitePanel.Providers.VirtualizationForPC WebsitePanel.Providers.VirtualizationForPC.HyperVForPC - v4.0 + v3.5 512 + true @@ -39,7 +40,6 @@ - @@ -106,6 +106,51 @@ Designer + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + Designer @@ -128,6 +173,78 @@ Designer + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/WebsitePanel.Providers.Web.IIs70.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/WebsitePanel.Providers.Web.IIs70.csproj index 6e34c920..4f13a37c 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/WebsitePanel.Providers.Web.IIs70.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/WebsitePanel.Providers.Web.IIs70.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 false publish\ true diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/WebApplicationGallery.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/WebApplicationGallery.cs index cf59cde0..c0b7d363 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/WebApplicationGallery.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/WebApplicationGallery.cs @@ -120,7 +120,7 @@ namespace WebsitePanel.Providers.Web // Log all version keys found Array.ForEach(versionKeys, (x) => { Log.WriteInfo("MSDeploy version key found: {0}", x); }); // Determine appropriate key name to query for - var installPathKey = Environment.Is64BitProcess ? "InstallPath" : "InstallPath_x86"; + var installPathKey = (IntPtr.Size == 8) ? "InstallPath" : "InstallPath_x86"; var fileVersion = String.Empty; // var libPath = String.Empty; diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/WebsitePanel.Providers.Web.IIs60.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/WebsitePanel.Providers.Web.IIs60.csproj index 5936c0fb..5fdf4a1b 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/WebsitePanel.Providers.Web.IIs60.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIs60/WebsitePanel.Providers.Web.IIs60.csproj @@ -15,7 +15,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/Sources/WebsitePanel.Server.Client/WebsitePanel.Server.Client.csproj b/WebsitePanel/Sources/WebsitePanel.Server.Client/WebsitePanel.Server.Client.csproj index 783e636e..37f746e8 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server.Client/WebsitePanel.Server.Client.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Server.Client/WebsitePanel.Server.Client.csproj @@ -17,7 +17,7 @@ 3.5 - v4.0 + v3.5 publish\ true Disk diff --git a/WebsitePanel/build.xml b/WebsitePanel/build.xml index 4ca4ad45..d27bfbc2 100644 --- a/WebsitePanel/build.xml +++ b/WebsitePanel/build.xml @@ -2,7 +2,7 @@ 1.2.1.0 - 1.2.1.2 + 1.2.1.3 1.2.1 2012-01-19 Release From d1708e267fb54cd3f8aace2eabb8f83ead3bd791 Mon Sep 17 00:00:00 2001 From: feodor_fitsner Date: Tue, 6 Mar 2012 17:07:41 -0800 Subject: [PATCH 22/38] SSL routines do not require CERTENROLLLib anymore and could work in .NET 4.0 and .NET 2.0 pools in both x86 and x64 modes. --- .../SSL/CertEnrollInterop.cs | 657 ++++++++++++++++++ .../SSL/SSLModuleService.cs | 35 +- .../WebsitePanel.Providers.Web.IIs70.csproj | 23 +- 3 files changed, 675 insertions(+), 40 deletions(-) create mode 100644 WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/SSL/CertEnrollInterop.cs diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/SSL/CertEnrollInterop.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/SSL/CertEnrollInterop.cs new file mode 100644 index 00000000..e218ab47 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/SSL/CertEnrollInterop.cs @@ -0,0 +1,657 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; +using System.Runtime.CompilerServices; +using System.Collections; +using System.Reflection; + +namespace CertEnrollInterop +{ + [ComImport, Guid("728AB307-217D-11DA-B2A4-000E7BBB2B09"), CompilerGenerated, InterfaceType(ComInterfaceType.InterfaceIsDual), CoClass(typeof(object))] + public interface CCspInformation : ICspInformation + { + } + + [ComImport, Guid("728AB308-217D-11DA-B2A4-000E7BBB2B09"), CompilerGenerated, CoClass(typeof(object)), InterfaceType(ComInterfaceType.InterfaceIsDual)] + public interface CCspInformations : ICspInformations, IEnumerable + { + } + + public enum CERTENROLL_OBJECTID + { + XCN_OID_ANSI_X942 = 0x35, + XCN_OID_ANSI_X942_DH = 0x36, + XCN_OID_ANY_APPLICATION_POLICY = 0xd8, + XCN_OID_ANY_CERT_POLICY = 180, + XCN_OID_APPLICATION_CERT_POLICIES = 0xe5, + XCN_OID_APPLICATION_POLICY_CONSTRAINTS = 0xe7, + XCN_OID_APPLICATION_POLICY_MAPPINGS = 230, + XCN_OID_ARCHIVED_KEY_ATTR = 0xe8, + XCN_OID_ARCHIVED_KEY_CERT_HASH = 0xeb, + XCN_OID_AUTHORITY_INFO_ACCESS = 0xcc, + XCN_OID_AUTHORITY_KEY_IDENTIFIER = 0xa9, + XCN_OID_AUTHORITY_KEY_IDENTIFIER2 = 0xb5, + XCN_OID_AUTHORITY_REVOCATION_LIST = 0x9c, + XCN_OID_AUTO_ENROLL_CTL_USAGE = 0xd9, + XCN_OID_BACKGROUND_OTHER_LOGOTYPE = 0x147, + XCN_OID_BASIC_CONSTRAINTS = 0xaf, + XCN_OID_BASIC_CONSTRAINTS2 = 0xb2, + XCN_OID_BIOMETRIC_EXT = 0xcd, + XCN_OID_BUSINESS_CATEGORY = 0x85, + XCN_OID_CA_CERTIFICATE = 0x9b, + XCN_OID_CERT_EXTENSIONS = 0xcf, + XCN_OID_CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID = 0x153, + XCN_OID_CERT_KEY_IDENTIFIER_PROP_ID = 0x152, + XCN_OID_CERT_MANIFOLD = 0xdb, + XCN_OID_CERT_MD5_HASH_PROP_ID = 0x155, + XCN_OID_CERT_POLICIES = 0xb3, + XCN_OID_CERT_POLICIES_95 = 0xab, + XCN_OID_CERT_POLICIES_95_QUALIFIER1 = 0x119, + XCN_OID_CERT_PROP_ID_PREFIX = 0x151, + XCN_OID_CERT_SUBJECT_NAME_MD5_HASH_PROP_ID = 340, + XCN_OID_CERTIFICATE_REVOCATION_LIST = 0x9d, + XCN_OID_CERTIFICATE_TEMPLATE = 0xe2, + XCN_OID_CERTSRV_CA_VERSION = 220, + XCN_OID_CERTSRV_CROSSCA_VERSION = 240, + XCN_OID_CERTSRV_PREVIOUS_CERT_HASH = 0xdd, + XCN_OID_CMC = 0x130, + XCN_OID_CMC_ADD_ATTRIBUTES = 0x145, + XCN_OID_CMC_ADD_EXTENSIONS = 0x138, + XCN_OID_CMC_DATA_RETURN = 0x134, + XCN_OID_CMC_DECRYPTED_POP = 0x13a, + XCN_OID_CMC_ENCRYPTED_POP = 0x139, + XCN_OID_CMC_GET_CERT = 0x13c, + XCN_OID_CMC_GET_CRL = 0x13d, + XCN_OID_CMC_ID_CONFIRM_CERT_ACCEPTANCE = 0x144, + XCN_OID_CMC_ID_POP_LINK_RANDOM = 0x142, + XCN_OID_CMC_ID_POP_LINK_WITNESS = 0x143, + XCN_OID_CMC_IDENTIFICATION = 0x132, + XCN_OID_CMC_IDENTITY_PROOF = 0x133, + XCN_OID_CMC_LRA_POP_WITNESS = 0x13b, + XCN_OID_CMC_QUERY_PENDING = 0x141, + XCN_OID_CMC_RECIPIENT_NONCE = 0x137, + XCN_OID_CMC_REG_INFO = 0x13f, + XCN_OID_CMC_RESPONSE_INFO = 320, + XCN_OID_CMC_REVOKE_REQUEST = 0x13e, + XCN_OID_CMC_SENDER_NONCE = 310, + XCN_OID_CMC_STATUS_INFO = 0x131, + XCN_OID_CMC_TRANSACTION_ID = 0x135, + XCN_OID_COMMON_NAME = 0x79, + XCN_OID_COUNTRY_NAME = 0x7c, + XCN_OID_CRL_DIST_POINTS = 0xbb, + XCN_OID_CRL_NEXT_PUBLISH = 0xdf, + XCN_OID_CRL_NUMBER = 0xbd, + XCN_OID_CRL_REASON_CODE = 0xb9, + XCN_OID_CRL_SELF_CDP = 0xe9, + XCN_OID_CRL_VIRTUAL_BASE = 0xde, + XCN_OID_CROSS_CERT_DIST_POINTS = 210, + XCN_OID_CROSS_CERTIFICATE_PAIR = 0x9e, + XCN_OID_CT_PKI_DATA = 0x12d, + XCN_OID_CT_PKI_RESPONSE = 0x12e, + XCN_OID_CTL = 0xd3, + XCN_OID_DELTA_CRL_INDICATOR = 190, + XCN_OID_DESCRIPTION = 0x83, + XCN_OID_DESTINATION_INDICATOR = 0x91, + XCN_OID_DEVICE_SERIAL_NUMBER = 0x7b, + XCN_OID_DN_QUALIFIER = 0xa1, + XCN_OID_DOMAIN_COMPONENT = 0xa2, + XCN_OID_DRM = 0x111, + XCN_OID_DRM_INDIVIDUALIZATION = 0x112, + XCN_OID_DS = 0x3a, + XCN_OID_DS_EMAIL_REPLICATION = 0xed, + XCN_OID_DSALG = 0x3b, + XCN_OID_DSALG_CRPT = 60, + XCN_OID_DSALG_HASH = 0x3d, + XCN_OID_DSALG_RSA = 0x3f, + XCN_OID_DSALG_SIGN = 0x3e, + XCN_OID_ECC_PUBLIC_KEY = 0x15d, + XCN_OID_ECDSA_SHA1 = 0x162, + XCN_OID_ECDSA_SPECIFIED = 0x162, + XCN_OID_EFS_RECOVERY = 260, + XCN_OID_EMBEDDED_NT_CRYPTO = 0x108, + XCN_OID_ENCRYPTED_KEY_HASH = 0xef, + XCN_OID_ENHANCED_KEY_USAGE = 0xbc, + XCN_OID_ENROLL_CERTTYPE_EXTENSION = 0xda, + XCN_OID_ENROLLMENT_AGENT = 0xc9, + XCN_OID_ENROLLMENT_CSP_PROVIDER = 0xc7, + XCN_OID_ENROLLMENT_NAME_VALUE_PAIR = 0xc6, + XCN_OID_ENTERPRISE_OID_ROOT = 0xe3, + XCN_OID_FACSIMILE_TELEPHONE_NUMBER = 0x8d, + XCN_OID_FRESHEST_CRL = 0xc0, + XCN_OID_GIVEN_NAME = 0x9f, + XCN_OID_INFOSEC = 0x63, + XCN_OID_INFOSEC_mosaicConfidentiality = 0x67, + XCN_OID_INFOSEC_mosaicIntegrity = 0x69, + XCN_OID_INFOSEC_mosaicKeyManagement = 0x6d, + XCN_OID_INFOSEC_mosaicKMandSig = 0x6f, + XCN_OID_INFOSEC_mosaicKMandUpdSig = 0x77, + XCN_OID_INFOSEC_mosaicSignature = 0x65, + XCN_OID_INFOSEC_mosaicTokenProtection = 0x6b, + XCN_OID_INFOSEC_mosaicUpdatedInteg = 120, + XCN_OID_INFOSEC_mosaicUpdatedSig = 0x76, + XCN_OID_INFOSEC_sdnsConfidentiality = 0x66, + XCN_OID_INFOSEC_sdnsIntegrity = 0x68, + XCN_OID_INFOSEC_sdnsKeyManagement = 0x6c, + XCN_OID_INFOSEC_sdnsKMandSig = 110, + XCN_OID_INFOSEC_sdnsSignature = 100, + XCN_OID_INFOSEC_sdnsTokenProtection = 0x6a, + XCN_OID_INFOSEC_SuiteAConfidentiality = 0x71, + XCN_OID_INFOSEC_SuiteAIntegrity = 0x72, + XCN_OID_INFOSEC_SuiteAKeyManagement = 0x74, + XCN_OID_INFOSEC_SuiteAKMandSig = 0x75, + XCN_OID_INFOSEC_SuiteASignature = 0x70, + XCN_OID_INFOSEC_SuiteATokenProtection = 0x73, + XCN_OID_INITIALS = 160, + XCN_OID_INTERNATIONAL_ISDN_NUMBER = 0x8f, + XCN_OID_IPSEC_KP_IKE_INTERMEDIATE = 0xfe, + XCN_OID_ISSUED_CERT_HASH = 0xec, + XCN_OID_ISSUER_ALT_NAME = 0xae, + XCN_OID_ISSUER_ALT_NAME2 = 0xb8, + XCN_OID_ISSUING_DIST_POINT = 0xbf, + XCN_OID_KEY_ATTRIBUTES = 170, + XCN_OID_KEY_USAGE = 0xb0, + XCN_OID_KEY_USAGE_RESTRICTION = 0xac, + XCN_OID_KEYID_RDN = 0xa8, + XCN_OID_KP_CA_EXCHANGE = 0xe0, + XCN_OID_KP_CSP_SIGNATURE = 0x110, + XCN_OID_KP_CTL_USAGE_SIGNING = 0xff, + XCN_OID_KP_DOCUMENT_SIGNING = 0x10c, + XCN_OID_KP_EFS = 0x103, + XCN_OID_KP_KEY_RECOVERY = 0x10b, + XCN_OID_KP_KEY_RECOVERY_AGENT = 0xe1, + XCN_OID_KP_LIFETIME_SIGNING = 0x10d, + XCN_OID_KP_MOBILE_DEVICE_SOFTWARE = 270, + XCN_OID_KP_QUALIFIED_SUBORDINATION = 0x10a, + XCN_OID_KP_SMART_DISPLAY = 0x10f, + XCN_OID_KP_SMARTCARD_LOGON = 0x115, + XCN_OID_KP_TIME_STAMP_SIGNING = 0x100, + XCN_OID_LEGACY_POLICY_MAPPINGS = 0xc3, + XCN_OID_LICENSE_SERVER = 0x114, + XCN_OID_LICENSES = 0x113, + XCN_OID_LOCAL_MACHINE_KEYSET = 0xa6, + XCN_OID_LOCALITY_NAME = 0x7d, + XCN_OID_LOGOTYPE_EXT = 0xce, + XCN_OID_LOYALTY_OTHER_LOGOTYPE = 0x146, + XCN_OID_MEMBER = 0x95, + XCN_OID_NAME_CONSTRAINTS = 0xc1, + XCN_OID_NETSCAPE = 0x121, + XCN_OID_NETSCAPE_BASE_URL = 0x124, + XCN_OID_NETSCAPE_CA_POLICY_URL = 0x128, + XCN_OID_NETSCAPE_CA_REVOCATION_URL = 0x126, + XCN_OID_NETSCAPE_CERT_EXTENSION = 290, + XCN_OID_NETSCAPE_CERT_RENEWAL_URL = 0x127, + XCN_OID_NETSCAPE_CERT_SEQUENCE = 300, + XCN_OID_NETSCAPE_CERT_TYPE = 0x123, + XCN_OID_NETSCAPE_COMMENT = 0x12a, + XCN_OID_NETSCAPE_DATA_TYPE = 0x12b, + XCN_OID_NETSCAPE_REVOCATION_URL = 0x125, + XCN_OID_NETSCAPE_SSL_SERVER_NAME = 0x129, + XCN_OID_NEXT_UPDATE_LOCATION = 0xd0, + XCN_OID_NIST_sha256 = 0x159, + XCN_OID_NIST_sha384 = 0x15a, + XCN_OID_NIST_sha512 = 0x15b, + XCN_OID_NONE = 0, + XCN_OID_NT_PRINCIPAL_NAME = 0xd6, + XCN_OID_NT5_CRYPTO = 0x106, + XCN_OID_NTDS_REPLICATION = 0xf1, + XCN_OID_OEM_WHQL_CRYPTO = 0x107, + XCN_OID_OIW = 0x40, + XCN_OID_OIWDIR = 0x5d, + XCN_OID_OIWDIR_CRPT = 0x5e, + XCN_OID_OIWDIR_HASH = 0x5f, + XCN_OID_OIWDIR_md2 = 0x61, + XCN_OID_OIWDIR_md2RSA = 0x62, + XCN_OID_OIWDIR_SIGN = 0x60, + XCN_OID_OIWSEC = 0x41, + XCN_OID_OIWSEC_desCBC = 70, + XCN_OID_OIWSEC_desCFB = 0x48, + XCN_OID_OIWSEC_desECB = 0x45, + XCN_OID_OIWSEC_desEDE = 80, + XCN_OID_OIWSEC_desMAC = 0x49, + XCN_OID_OIWSEC_desOFB = 0x47, + XCN_OID_OIWSEC_dhCommMod = 0x4f, + XCN_OID_OIWSEC_dsa = 0x4b, + XCN_OID_OIWSEC_dsaComm = 0x53, + XCN_OID_OIWSEC_dsaCommSHA = 0x54, + XCN_OID_OIWSEC_dsaCommSHA1 = 0x5b, + XCN_OID_OIWSEC_dsaSHA1 = 90, + XCN_OID_OIWSEC_keyHashSeal = 0x56, + XCN_OID_OIWSEC_md2RSASign = 0x57, + XCN_OID_OIWSEC_md4RSA = 0x42, + XCN_OID_OIWSEC_md4RSA2 = 0x44, + XCN_OID_OIWSEC_md5RSA = 0x43, + XCN_OID_OIWSEC_md5RSASign = 0x58, + XCN_OID_OIWSEC_mdc2 = 0x52, + XCN_OID_OIWSEC_mdc2RSA = 0x4d, + XCN_OID_OIWSEC_rsaSign = 0x4a, + XCN_OID_OIWSEC_rsaXchg = 0x55, + XCN_OID_OIWSEC_sha = 0x51, + XCN_OID_OIWSEC_sha1 = 0x59, + XCN_OID_OIWSEC_sha1RSASign = 0x5c, + XCN_OID_OIWSEC_shaDSA = 0x4c, + XCN_OID_OIWSEC_shaRSA = 0x4e, + XCN_OID_ORGANIZATION_NAME = 0x80, + XCN_OID_ORGANIZATIONAL_UNIT_NAME = 0x81, + XCN_OID_OS_VERSION = 200, + XCN_OID_OWNER = 150, + XCN_OID_PHYSICAL_DELIVERY_OFFICE_NAME = 0x89, + XCN_OID_PKCS = 2, + XCN_OID_PKCS_1 = 5, + XCN_OID_PKCS_10 = 14, + XCN_OID_PKCS_12 = 15, + XCN_OID_PKCS_12_EXTENDED_ATTRIBUTES = 0xa7, + XCN_OID_PKCS_12_FRIENDLY_NAME_ATTR = 0xa3, + XCN_OID_PKCS_12_KEY_PROVIDER_NAME_ATTR = 0xa5, + XCN_OID_PKCS_12_LOCAL_KEY_ID = 0xa4, + XCN_OID_PKCS_2 = 6, + XCN_OID_PKCS_3 = 7, + XCN_OID_PKCS_4 = 8, + XCN_OID_PKCS_5 = 9, + XCN_OID_PKCS_6 = 10, + XCN_OID_PKCS_7 = 11, + XCN_OID_PKCS_7_DATA = 0x149, + XCN_OID_PKCS_7_DIGESTED = 0x14d, + XCN_OID_PKCS_7_ENCRYPTED = 0x14e, + XCN_OID_PKCS_7_ENVELOPED = 0x14b, + XCN_OID_PKCS_7_SIGNED = 330, + XCN_OID_PKCS_7_SIGNEDANDENVELOPED = 0x14c, + XCN_OID_PKCS_8 = 12, + XCN_OID_PKCS_9 = 13, + XCN_OID_PKCS_9_CONTENT_TYPE = 0x14f, + XCN_OID_PKCS_9_MESSAGE_DIGEST = 0x150, + XCN_OID_PKIX = 0xca, + XCN_OID_PKIX_ACC_DESCR = 0x11a, + XCN_OID_PKIX_CA_ISSUERS = 0x11c, + XCN_OID_PKIX_KP = 0xf3, + XCN_OID_PKIX_KP_CLIENT_AUTH = 0xf5, + XCN_OID_PKIX_KP_CODE_SIGNING = 0xf6, + XCN_OID_PKIX_KP_EMAIL_PROTECTION = 0xf7, + XCN_OID_PKIX_KP_IPSEC_END_SYSTEM = 0xf8, + XCN_OID_PKIX_KP_IPSEC_TUNNEL = 0xf9, + XCN_OID_PKIX_KP_IPSEC_USER = 250, + XCN_OID_PKIX_KP_OCSP_SIGNING = 0xfc, + XCN_OID_PKIX_KP_SERVER_AUTH = 0xf4, + XCN_OID_PKIX_KP_TIMESTAMP_SIGNING = 0xfb, + XCN_OID_PKIX_NO_SIGNATURE = 0x12f, + XCN_OID_PKIX_OCSP = 0x11b, + XCN_OID_PKIX_OCSP_BASIC_SIGNED_RESPONSE = 0x148, + XCN_OID_PKIX_OCSP_NOCHECK = 0xfd, + XCN_OID_PKIX_PE = 0xcb, + XCN_OID_PKIX_POLICY_QUALIFIER_CPS = 0x117, + XCN_OID_PKIX_POLICY_QUALIFIER_USERNOTICE = 280, + XCN_OID_POLICY_CONSTRAINTS = 0xc4, + XCN_OID_POLICY_MAPPINGS = 0xc2, + XCN_OID_POST_OFFICE_BOX = 0x88, + XCN_OID_POSTAL_ADDRESS = 0x86, + XCN_OID_POSTAL_CODE = 0x87, + XCN_OID_PREFERRED_DELIVERY_METHOD = 0x92, + XCN_OID_PRESENTATION_ADDRESS = 0x93, + XCN_OID_PRIVATEKEY_USAGE_PERIOD = 0xb1, + XCN_OID_PRODUCT_UPDATE = 0xd7, + XCN_OID_RDN_DUMMY_SIGNER = 0xe4, + XCN_OID_REASON_CODE_HOLD = 0xba, + XCN_OID_REGISTERED_ADDRESS = 0x90, + XCN_OID_REMOVE_CERTIFICATE = 0xd1, + XCN_OID_RENEWAL_CERTIFICATE = 0xc5, + XCN_OID_REQUEST_CLIENT_INFO = 0xee, + XCN_OID_REQUIRE_CERT_CHAIN_POLICY = 0xea, + XCN_OID_ROLE_OCCUPANT = 0x97, + XCN_OID_ROOT_LIST_SIGNER = 0x109, + XCN_OID_RSA = 1, + XCN_OID_RSA_certExtensions = 0x27, + XCN_OID_RSA_challengePwd = 0x24, + XCN_OID_RSA_contentType = 0x20, + XCN_OID_RSA_counterSign = 0x23, + XCN_OID_RSA_data = 0x17, + XCN_OID_RSA_DES_EDE3_CBC = 0x33, + XCN_OID_RSA_DH = 0x16, + XCN_OID_RSA_digestedData = 0x1b, + XCN_OID_RSA_emailAddr = 30, + XCN_OID_RSA_ENCRYPT = 4, + XCN_OID_RSA_encryptedData = 0x1d, + XCN_OID_RSA_envelopedData = 0x19, + XCN_OID_RSA_extCertAttrs = 0x26, + XCN_OID_RSA_HASH = 3, + XCN_OID_RSA_hashedData = 0x1c, + XCN_OID_RSA_MD2 = 0x2e, + XCN_OID_RSA_MD2RSA = 0x11, + XCN_OID_RSA_MD4 = 0x2f, + XCN_OID_RSA_MD4RSA = 0x12, + XCN_OID_RSA_MD5 = 0x30, + XCN_OID_RSA_MD5RSA = 0x13, + XCN_OID_RSA_messageDigest = 0x21, + XCN_OID_RSA_MGF1 = 0x15c, + XCN_OID_RSA_preferSignedData = 0x29, + XCN_OID_RSA_RC2CBC = 0x31, + XCN_OID_RSA_RC4 = 50, + XCN_OID_RSA_RC5_CBCPad = 0x34, + XCN_OID_RSA_RSA = 0x10, + XCN_OID_RSA_SETOAEP_RSA = 0x15, + XCN_OID_RSA_SHA1RSA = 20, + XCN_OID_RSA_SHA256RSA = 0x156, + XCN_OID_RSA_SHA384RSA = 0x157, + XCN_OID_RSA_SHA512RSA = 0x158, + XCN_OID_RSA_signedData = 0x18, + XCN_OID_RSA_signEnvData = 0x1a, + XCN_OID_RSA_signingTime = 0x22, + XCN_OID_RSA_SMIMEalg = 0x2a, + XCN_OID_RSA_SMIMEalgCMS3DESwrap = 0x2c, + XCN_OID_RSA_SMIMEalgCMSRC2wrap = 0x2d, + XCN_OID_RSA_SMIMEalgESDH = 0x2b, + XCN_OID_RSA_SMIMECapabilities = 40, + XCN_OID_RSA_SSA_PSS = 0x161, + XCN_OID_RSA_unstructAddr = 0x25, + XCN_OID_RSA_unstructName = 0x1f, + XCN_OID_SEARCH_GUIDE = 0x84, + XCN_OID_SEE_ALSO = 0x98, + XCN_OID_SERIALIZED = 0xd5, + XCN_OID_SERVER_GATED_CRYPTO = 0x101, + XCN_OID_SGC_NETSCAPE = 0x102, + XCN_OID_SORTED_CTL = 0xd4, + XCN_OID_STATE_OR_PROVINCE_NAME = 0x7e, + XCN_OID_STREET_ADDRESS = 0x7f, + XCN_OID_SUBJECT_ALT_NAME = 0xad, + XCN_OID_SUBJECT_ALT_NAME2 = 0xb7, + XCN_OID_SUBJECT_DIR_ATTRS = 0xf2, + XCN_OID_SUBJECT_KEY_IDENTIFIER = 0xb6, + XCN_OID_SUPPORTED_APPLICATION_CONTEXT = 0x94, + XCN_OID_SUR_NAME = 0x7a, + XCN_OID_TELEPHONE_NUMBER = 0x8a, + XCN_OID_TELETEXT_TERMINAL_IDENTIFIER = 140, + XCN_OID_TELEX_NUMBER = 0x8b, + XCN_OID_TITLE = 130, + XCN_OID_USER_CERTIFICATE = 0x9a, + XCN_OID_USER_PASSWORD = 0x99, + XCN_OID_VERISIGN_BITSTRING_6_13 = 0x11f, + XCN_OID_VERISIGN_ISS_STRONG_CRYPTO = 0x120, + XCN_OID_VERISIGN_ONSITE_JURISDICTION_HASH = 0x11e, + XCN_OID_VERISIGN_PRIVATE_6_9 = 0x11d, + XCN_OID_WHQL_CRYPTO = 0x105, + XCN_OID_X21_ADDRESS = 0x8e, + XCN_OID_X957 = 0x37, + XCN_OID_X957_DSA = 0x38, + XCN_OID_X957_SHA1DSA = 0x39, + XCN_OID_YESNO_TRUST_ATTR = 0x116 + } + + [ComImport, CoClass(typeof(object)), CompilerGenerated, Guid("728AB300-217D-11DA-B2A4-000E7BBB2B09"), InterfaceType(ComInterfaceType.InterfaceIsDual)] + public interface CObjectId : IObjectId + { + } + + [ComImport, CompilerGenerated, CoClass(typeof(object)), InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("728AB301-217D-11DA-B2A4-000E7BBB2B09")] + public interface CObjectIds : IObjectIds, IEnumerable + { + } + + [ComImport, CoClass(typeof(object)), CompilerGenerated, InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("728AB303-217D-11DA-B2A4-000E7BBB2B09")] + public interface CX500DistinguishedName : IX500DistinguishedName + { + } + + [ComImport, CoClass(typeof(object)), Guid("728AB35B-217D-11DA-B2A4-000E7BBB2B09"), CompilerGenerated, InterfaceType(ComInterfaceType.InterfaceIsDual)] + public interface CX509CertificateRequestPkcs10 : IX509CertificateRequestPkcs10V2, IX509CertificateRequestPkcs10, IX509CertificateRequest + { + } + + [ComImport, InterfaceType(ComInterfaceType.InterfaceIsDual), CompilerGenerated, Guid("728AB350-217D-11DA-B2A4-000E7BBB2B09"), CoClass(typeof(object))] + public interface CX509Enrollment : IX509Enrollment2, IX509Enrollment + { + } + + [ComImport, Guid("728AB30D-217D-11DA-B2A4-000E7BBB2B09"), CoClass(typeof(object)), CompilerGenerated, InterfaceType(ComInterfaceType.InterfaceIsDual)] + public interface CX509Extension : IX509Extension + { + } + + [ComImport, Guid("728AB310-217D-11DA-B2A4-000E7BBB2B09"), CompilerGenerated, CoClass(typeof(object)), InterfaceType(ComInterfaceType.InterfaceIsDual)] + public interface CX509ExtensionEnhancedKeyUsage : IX509ExtensionEnhancedKeyUsage, IX509Extension + { + } + + [ComImport, InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("728AB30F-217D-11DA-B2A4-000E7BBB2B09"), CoClass(typeof(object)), CompilerGenerated] + public interface CX509ExtensionKeyUsage : IX509ExtensionKeyUsage, IX509Extension + { + } + + [ComImport, InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("728AB30E-217D-11DA-B2A4-000E7BBB2B09"), CompilerGenerated, CoClass(typeof(object))] + public interface CX509Extensions : IX509Extensions, IEnumerable + { + } + + [ComImport, InterfaceType(ComInterfaceType.InterfaceIsDual), CompilerGenerated, Guid("728AB30C-217D-11DA-B2A4-000E7BBB2B09"), CoClass(typeof(object))] + public interface CX509PrivateKey : IX509PrivateKey + { + } + + //[InterfaceType(ComInterfaceType.InterfaceIsDual)("728ab348-217d-11da-b2a4-000e7bbb2b09", "CERTENROLLLib.EncodingType"), CompilerGenerated] + public enum EncodingType + { + XCN_CRYPT_STRING_ANY = 7, + XCN_CRYPT_STRING_BASE64 = 1, + XCN_CRYPT_STRING_BASE64_ANY = 6, + XCN_CRYPT_STRING_BASE64HEADER = 0, + XCN_CRYPT_STRING_BASE64REQUESTHEADER = 3, + XCN_CRYPT_STRING_BASE64X509CRLHEADER = 9, + XCN_CRYPT_STRING_BINARY = 2, + XCN_CRYPT_STRING_HASHDATA = 0x10000000, + XCN_CRYPT_STRING_HEX = 4, + XCN_CRYPT_STRING_HEX_ANY = 8, + XCN_CRYPT_STRING_HEXADDR = 10, + XCN_CRYPT_STRING_HEXASCII = 5, + XCN_CRYPT_STRING_HEXASCIIADDR = 11, + XCN_CRYPT_STRING_HEXRAW = 12, + XCN_CRYPT_STRING_NOCR = -2147483648, + XCN_CRYPT_STRING_NOCRLF = 0x40000000, + XCN_CRYPT_STRING_STRICT = 0x20000000 + } + + [ComImport, Guid("728AB307-217D-11DA-B2A4-000E7BBB2B09"), InterfaceType(ComInterfaceType.InterfaceIsDual), CompilerGenerated] + public interface ICspInformation + { + [DispId(0x60020000)] + void InitializeFromName([In, MarshalAs(UnmanagedType.BStr)] string strName); + } + + [ComImport, Guid("728AB308-217D-11DA-B2A4-000E7BBB2B09"), CompilerGenerated, DefaultMember("ItemByIndex"), InterfaceType(ComInterfaceType.InterfaceIsDual)] + public interface ICspInformations : IEnumerable + { + void _VtblGap1_3(); + [DispId(2)] + void Add([In, MarshalAs(UnmanagedType.Interface)] CCspInformation pVal); + } + + public enum InstallResponseRestrictionFlags + { + AllowNone = 0, + AllowNoOutstandingRequest = 1, + AllowUntrustedCertificate = 2, + AllowUntrustedRoot = 4 + } + + [ComImport, InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("728AB300-217D-11DA-B2A4-000E7BBB2B09"), CompilerGenerated] + public interface IObjectId + { + [DispId(0x60020000)] + void InitializeFromName([In] CERTENROLL_OBJECTID Name); + } + + [ComImport, DefaultMember("ItemByIndex"), CompilerGenerated, InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("728AB301-217D-11DA-B2A4-000E7BBB2B09")] + public interface IObjectIds : IEnumerable + { + void _VtblGap1_3(); + [DispId(2)] + void Add([In, MarshalAs(UnmanagedType.Interface)] CObjectId pVal); + } + + [ComImport, CompilerGenerated, Guid("728AB303-217D-11DA-B2A4-000E7BBB2B09"), InterfaceType(ComInterfaceType.InterfaceIsDual)] + public interface IX500DistinguishedName + { + void _VtblGap1_1(); + [DispId(0x60020001)] + void Encode([In, MarshalAs(UnmanagedType.BStr)] string strName, [In, Optional] X500NameFlags NameFlags); + } + + [ComImport, Guid("728AB341-217D-11DA-B2A4-000E7BBB2B09"), CompilerGenerated, InterfaceType(ComInterfaceType.InterfaceIsDual)] + public interface IX509CertificateRequest + { + } + + [ComImport, Guid("728AB342-217D-11DA-B2A4-000E7BBB2B09"), InterfaceType(ComInterfaceType.InterfaceIsDual), CompilerGenerated] + public interface IX509CertificateRequestPkcs10 : IX509CertificateRequest + { + } + + [ComImport, Guid("728AB35B-217D-11DA-B2A4-000E7BBB2B09"), CompilerGenerated, InterfaceType(ComInterfaceType.InterfaceIsDual)] + public interface IX509CertificateRequestPkcs10V2 : IX509CertificateRequestPkcs10, IX509CertificateRequest + { + void _VtblGap1_26(); + [DispId(0x60030001)] + void InitializeFromPrivateKey([In] X509CertificateEnrollmentContext Context, [In, MarshalAs(UnmanagedType.Interface)] CX509PrivateKey pPrivateKey, [In, MarshalAs(UnmanagedType.BStr)] string strTemplateName); + void _VtblGap2_11(); + CX500DistinguishedName Subject { [return: MarshalAs(UnmanagedType.Interface)] [DispId(0x6003000d)] get; [param: In, MarshalAs(UnmanagedType.Interface)] [DispId(0x6003000d)] set; } + void _VtblGap3_1(); + bool SmimeCapabilities { [DispId(0x60030010)] get; [param: In] [DispId(0x60030010)] set; } + void _VtblGap4_4(); + CX509Extensions X509Extensions { [return: MarshalAs(UnmanagedType.Interface)] [DispId(0x60030016)] get; } + } + + [ComImport, Guid("728AB346-217D-11DA-B2A4-000E7BBB2B09"), CompilerGenerated, InterfaceType(ComInterfaceType.InterfaceIsDual)] + public interface IX509Enrollment + { + } + + [ComImport, Guid("728AB350-217D-11DA-B2A4-000E7BBB2B09"), CompilerGenerated, InterfaceType(ComInterfaceType.InterfaceIsDual)] + public interface IX509Enrollment2 : IX509Enrollment + { + [DispId(0x60020000)] + void Initialize([In] X509CertificateEnrollmentContext Context); + void _VtblGap1_1(); + [DispId(0x60020002)] + void InitializeFromRequest([In, MarshalAs(UnmanagedType.Interface)] IX509CertificateRequest pRequest); + [return: MarshalAs(UnmanagedType.BStr)] + [DispId(0x60020003)] + string CreateRequest([In, Optional] EncodingType Encoding); + void _VtblGap2_1(); + [DispId(0x60020005)] + void InstallResponse([In] InstallResponseRestrictionFlags Restrictions, [In, MarshalAs(UnmanagedType.BStr)] string strResponse, [In] EncodingType Encoding, [In, MarshalAs(UnmanagedType.BStr)] string strPassword); + void _VtblGap3_11(); + string CertificateFriendlyName { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x60020011)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x60020011)] set; } + } + + [ComImport, Guid("728AB30D-217D-11DA-B2A4-000E7BBB2B09"), CompilerGenerated, InterfaceType(ComInterfaceType.InterfaceIsDual)] + public interface IX509Extension + { + } + + [ComImport, CompilerGenerated, Guid("728AB310-217D-11DA-B2A4-000E7BBB2B09"), InterfaceType(ComInterfaceType.InterfaceIsDual)] + public interface IX509ExtensionEnhancedKeyUsage : IX509Extension + { + void _VtblGap1_5(); + [DispId(0x60030000)] + void InitializeEncode([In, MarshalAs(UnmanagedType.Interface)] CObjectIds pValue); + } + + [ComImport, InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("728AB30F-217D-11DA-B2A4-000E7BBB2B09"), CompilerGenerated] + public interface IX509ExtensionKeyUsage : IX509Extension + { + void _VtblGap1_5(); + [DispId(0x60030000)] + void InitializeEncode([In] X509KeyUsageFlags UsageFlags); + } + + [ComImport, InterfaceType(ComInterfaceType.InterfaceIsDual), DefaultMember("ItemByIndex"), Guid("728AB30E-217D-11DA-B2A4-000E7BBB2B09"), CompilerGenerated] + public interface IX509Extensions : IEnumerable + { + void _VtblGap1_3(); + [DispId(2)] + void Add([In, MarshalAs(UnmanagedType.Interface)] CX509Extension pVal); + } + + [ComImport, Guid("728AB30C-217D-11DA-B2A4-000E7BBB2B09"), InterfaceType(ComInterfaceType.InterfaceIsDual), CompilerGenerated] + public interface IX509PrivateKey + { + void _VtblGap1_1(); + [DispId(0x60020001)] + void Create(); + void _VtblGap2_12(); + CCspInformations CspInformations { [return: MarshalAs(UnmanagedType.Interface)] [DispId(0x6002000e)] get; [param: In, MarshalAs(UnmanagedType.Interface)] [DispId(0x6002000e)] set; } + void _VtblGap3_10(); + X509KeySpec KeySpec { [DispId(0x6002001a)] get; [param: In] [DispId(0x6002001a)] set; } + int Length { [DispId(0x6002001c)] get; [param: In] [DispId(0x6002001c)] set; } + X509PrivateKeyExportFlags ExportPolicy { [DispId(0x6002001e)] get; [param: In] [DispId(0x6002001e)] set; } + X509PrivateKeyUsageFlags KeyUsage { [DispId(0x60020020)] get; [param: In] [DispId(0x60020020)] set; } + void _VtblGap4_2(); + bool MachineContext { [DispId(0x60020024)] get; [param: In] [DispId(0x60020024)] set; } + } + + public enum X500NameFlags + { + XCN_CERT_NAME_STR_COMMA_FLAG = 0x4000000, + XCN_CERT_NAME_STR_CRLF_FLAG = 0x8000000, + XCN_CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG = 0x10000, + XCN_CERT_NAME_STR_DISABLE_UTF8_DIR_STR_FLAG = 0x100000, + XCN_CERT_NAME_STR_ENABLE_PUNYCODE_FLAG = 0x200000, + XCN_CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG = 0x20000, + XCN_CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG = 0x40000, + XCN_CERT_NAME_STR_FORCE_UTF8_DIR_STR_FLAG = 0x80000, + XCN_CERT_NAME_STR_FORWARD_FLAG = 0x1000000, + XCN_CERT_NAME_STR_NO_PLUS_FLAG = 0x20000000, + XCN_CERT_NAME_STR_NO_QUOTING_FLAG = 0x10000000, + XCN_CERT_NAME_STR_NONE = 0, + XCN_CERT_NAME_STR_REVERSE_FLAG = 0x2000000, + XCN_CERT_NAME_STR_SEMICOLON_FLAG = 0x40000000, + XCN_CERT_OID_NAME_STR = 2, + XCN_CERT_SIMPLE_NAME_STR = 1, + XCN_CERT_X500_NAME_STR = 3, + XCN_CERT_XML_NAME_STR = 4 + } + + public enum X509CertificateEnrollmentContext + { + ContextAdministratorForceMachine = 3, + ContextMachine = 2, + ContextUser = 1 + } + + public enum X509KeySpec + { + XCN_AT_NONE, + XCN_AT_KEYEXCHANGE, + XCN_AT_SIGNATURE + } + + public enum X509KeyUsageFlags + { + XCN_CERT_CRL_SIGN_KEY_USAGE = 2, + XCN_CERT_DATA_ENCIPHERMENT_KEY_USAGE = 0x10, + XCN_CERT_DECIPHER_ONLY_KEY_USAGE = 0x8000, + XCN_CERT_DIGITAL_SIGNATURE_KEY_USAGE = 0x80, + XCN_CERT_ENCIPHER_ONLY_KEY_USAGE = 1, + XCN_CERT_KEY_AGREEMENT_KEY_USAGE = 8, + XCN_CERT_KEY_CERT_SIGN_KEY_USAGE = 4, + XCN_CERT_KEY_ENCIPHERMENT_KEY_USAGE = 0x20, + XCN_CERT_NO_KEY_USAGE = 0, + XCN_CERT_NON_REPUDIATION_KEY_USAGE = 0x40, + XCN_CERT_OFFLINE_CRL_SIGN_KEY_USAGE = 2 + } + + public enum X509PrivateKeyExportFlags + { + XCN_NCRYPT_ALLOW_ARCHIVING_FLAG = 4, + XCN_NCRYPT_ALLOW_EXPORT_FLAG = 1, + XCN_NCRYPT_ALLOW_EXPORT_NONE = 0, + XCN_NCRYPT_ALLOW_PLAINTEXT_ARCHIVING_FLAG = 8, + XCN_NCRYPT_ALLOW_PLAINTEXT_EXPORT_FLAG = 2 + } + + public enum X509PrivateKeyUsageFlags + { + XCN_NCRYPT_ALLOW_ALL_USAGES = 0xffffff, + XCN_NCRYPT_ALLOW_DECRYPT_FLAG = 1, + XCN_NCRYPT_ALLOW_KEY_AGREEMENT_FLAG = 4, + XCN_NCRYPT_ALLOW_SIGNING_FLAG = 2, + XCN_NCRYPT_ALLOW_USAGES_NONE = 0 + } +} \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/SSL/SSLModuleService.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/SSL/SSLModuleService.cs index b87fb167..e38a34d7 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/SSL/SSLModuleService.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/SSL/SSLModuleService.cs @@ -31,8 +31,7 @@ using WebsitePanel.Providers.Common; using WebsitePanel.Server.Utils; using System; using System.Linq; -using CERTENROLLLib; -using CERTCLIENTLib; +using CertEnrollInterop; using System.Collections.Generic; using System.Security.Cryptography.X509Certificates; using WebsitePanel.Providers.Web.Iis.Common; @@ -46,16 +45,16 @@ namespace WebsitePanel.Providers.Web.Iis public void GenerateCsr(SSLCertificate cert) { // Create all the objects that will be required - CX509CertificateRequestPkcs10 pkcs10 = new CX509CertificateRequestPkcs10(); - CX509PrivateKey privateKey = new CX509PrivateKey(); - CCspInformation csp = new CCspInformation(); - CCspInformations csPs = new CCspInformations(); - CX500DistinguishedName dn = new CX500DistinguishedName(); - CX509Enrollment enroll = new CX509Enrollment(); - CObjectIds objectIds = new CObjectIds(); - CObjectId objectId = new CObjectId(); - CX509ExtensionKeyUsage extensionKeyUsage = new CX509ExtensionKeyUsage(); - CX509ExtensionEnhancedKeyUsage x509ExtensionEnhancedKeyUsage = new CX509ExtensionEnhancedKeyUsage(); + CX509CertificateRequestPkcs10 pkcs10 = Activator.CreateInstance(Type.GetTypeFromProgID("X509Enrollment.CX509CertificateRequestPkcs10", true)) as CX509CertificateRequestPkcs10; + CX509PrivateKey privateKey = Activator.CreateInstance(Type.GetTypeFromProgID("X509Enrollment.CX509PrivateKey", true)) as CX509PrivateKey; + CCspInformation csp = Activator.CreateInstance(Type.GetTypeFromProgID("X509Enrollment.CCspInformation", true)) as CCspInformation; + CCspInformations csPs = Activator.CreateInstance(Type.GetTypeFromProgID("X509Enrollment.CCspInformations", true)) as CCspInformations; + CX500DistinguishedName dn = Activator.CreateInstance(Type.GetTypeFromProgID("X509Enrollment.CX500DistinguishedName", true)) as CX500DistinguishedName; + CX509Enrollment enroll = Activator.CreateInstance(Type.GetTypeFromProgID("X509Enrollment.CX509Enrollment", true)) as CX509Enrollment; + CObjectIds objectIds = Activator.CreateInstance(Type.GetTypeFromProgID("X509Enrollment.CObjectIds", true)) as CObjectIds; + CObjectId objectId = Activator.CreateInstance(Type.GetTypeFromProgID("X509Enrollment.CObjectId", true)) as CObjectId; + CX509ExtensionKeyUsage extensionKeyUsage = Activator.CreateInstance(Type.GetTypeFromProgID("X509Enrollment.CX509ExtensionKeyUsage", true)) as CX509ExtensionKeyUsage; + CX509ExtensionEnhancedKeyUsage x509ExtensionEnhancedKeyUsage = Activator.CreateInstance(Type.GetTypeFromProgID("X509Enrollment.CX509ExtensionEnhancedKeyUsage", true)) as CX509ExtensionEnhancedKeyUsage; try { @@ -90,17 +89,17 @@ namespace WebsitePanel.Providers.Web.Iis cert.PrivateKey = privateKey.ToString(); // Key Usage Extension extensionKeyUsage.InitializeEncode( - CERTENROLLLib.X509KeyUsageFlags.XCN_CERT_DIGITAL_SIGNATURE_KEY_USAGE | - CERTENROLLLib.X509KeyUsageFlags.XCN_CERT_NON_REPUDIATION_KEY_USAGE | - CERTENROLLLib.X509KeyUsageFlags.XCN_CERT_KEY_ENCIPHERMENT_KEY_USAGE | - CERTENROLLLib.X509KeyUsageFlags.XCN_CERT_DATA_ENCIPHERMENT_KEY_USAGE + CertEnrollInterop.X509KeyUsageFlags.XCN_CERT_DIGITAL_SIGNATURE_KEY_USAGE | + CertEnrollInterop.X509KeyUsageFlags.XCN_CERT_NON_REPUDIATION_KEY_USAGE | + CertEnrollInterop.X509KeyUsageFlags.XCN_CERT_KEY_ENCIPHERMENT_KEY_USAGE | + CertEnrollInterop.X509KeyUsageFlags.XCN_CERT_DATA_ENCIPHERMENT_KEY_USAGE ); pkcs10.X509Extensions.Add((CX509Extension)extensionKeyUsage); // Enhanced Key Usage Extension - objectId.InitializeFromName(CERTENROLLLib.CERTENROLL_OBJECTID.XCN_OID_PKIX_KP_SERVER_AUTH); + objectId.InitializeFromName(CertEnrollInterop.CERTENROLL_OBJECTID.XCN_OID_PKIX_KP_SERVER_AUTH); objectIds.Add(objectId); x509ExtensionEnhancedKeyUsage.InitializeEncode(objectIds); pkcs10.X509Extensions.Add((CX509Extension)x509ExtensionEnhancedKeyUsage); @@ -131,7 +130,7 @@ namespace WebsitePanel.Providers.Web.Iis public SSLCertificate InstallCertificate(SSLCertificate cert, WebSite website) { - CX509Enrollment response = new CX509Enrollment(); + CX509Enrollment response = Activator.CreateInstance(Type.GetTypeFromProgID("X509Enrollment.CX509Enrollment", true)) as CX509Enrollment; try { diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/WebsitePanel.Providers.Web.IIs70.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/WebsitePanel.Providers.Web.IIs70.csproj index 4f13a37c..a99e0d31 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/WebsitePanel.Providers.Web.IIs70.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.IIS70/WebsitePanel.Providers.Web.IIs70.csproj @@ -110,6 +110,7 @@ + @@ -149,28 +150,6 @@ true - - - {372FCE32-4324-11D0-8810-00A0C903B83C} - 1 - 0 - 0 - tlbimp - False - True - False - - - {728AB348-217D-11DA-B2A4-000E7BBB2B09} - 1 - 0 - 0 - tlbimp - False - True - False - -