public static bool CMPServerPostinstallProcessor() { bool returnValue = true; try { if (!PropertyBagDictionary.Instance.PropertyExists(PropertyBagConstants.Uninstall)) { String currentSetupUser = String.Format(SetupConstants.UserAccountTemplate, Environment.UserDomainName, Environment.UserName); SetupInputs.Instance.EditItem(SetupInputTags.SetupUserAccountTag, currentSetupUser); SetupDatabaseHelper.CheckDatabase( InstallItemCustomDelegates.GetSQLServerInstanceNameStr(false), SetupInputs.Instance.FindItem(SetupInputTags.SqlDatabaseNameTag), false); SetupDatabaseHelper.CreateDB(false); if (SetupInputs.Instance.FindItem(SetupInputTags.RemoteDatabaseImpersonationTag)) { SetupDatabaseHelper.GrantSetupUserDBAccess(true, false); SetupInputs.Instance.EditItem(SetupInputTags.RemoteDatabaseImpersonationTag, false); PropertyBagDictionary.Instance.SafeAdd(PropertyBagConstants.AfterGrantSetupUserDBAccess, true); } ServiceConfigurationHandler serviceConfigurationHandler = new ServiceConfigurationHandler(); CmpWorkerServiceHelper.ConfigureCMPWorkerService(serviceConfigurationHandler); serviceConfigurationHandler.StartService(SetupConstants.EngineServiceName); } } catch (Exception exception) { SetupLogger.LogException(exception, "CMPServerPostinstallProcessor threw an exception"); PropertyBagDictionary.Instance.SafeAdd(PropertyBagDictionary.VitalFailure, (PropertyBagDictionary.Instance.PropertyExists(PropertyBagDictionary.VitalFailure) ? (PropertyBagDictionary.Instance.GetProperty <InstallItemsInstallDataItem.InstallDataInputs> (PropertyBagDictionary.VitalFailure) | InstallItemsInstallDataItem.InstallDataInputs.PostInstallItem) : InstallItemsInstallDataItem.InstallDataInputs.PostInstallItem)); if (!PropertyBagDictionary.Instance.PropertyExists(PropertyBagConstants.FailureReason)) { PropertyBagDictionary.Instance.SafeAdd(PropertyBagConstants.FailureReason, exception); } returnValue = false; } return(returnValue); }
public static bool WAPExtensionCommonPostIstallProcessor() { SetupLogger.LogInfo("WAPExtensionPostIstallProcessor: Entered."); bool returnValue = true; try { if (!PropertyBagDictionary.Instance.PropertyExists(PropertyBagConstants.Uninstall)) { String currentSetupUser = String.Format(SetupConstants.UserAccountTemplate, Environment.UserDomainName, Environment.UserName); SetupInputs.Instance.EditItem(SetupInputTags.SetupUserAccountTag, currentSetupUser); SetupDatabaseHelper.CheckDatabase( InstallItemCustomDelegates.GetSQLServerInstanceNameStr(true), SetupInputs.Instance.FindItem(SetupInputTags.WapSqlDatabaseNameTag), true); SetupDatabaseHelper.CreateDB(true); if (SetupInputs.Instance.FindItem(SetupInputTags.WapRemoteDatabaseImpersonationTag)) { SetupDatabaseHelper.GrantSetupUserDBAccess(true, true); SetupInputs.Instance.EditItem(SetupInputTags.WapRemoteDatabaseImpersonationTag, false); PropertyBagDictionary.Instance.SafeAdd(PropertyBagConstants.WapAfterGrantSetupUserDBAccess, true); } SetupDatabaseHelper.DeployWAPDacpac(); } } catch (ArgumentException exception) { if (!PropertyBagDictionary.Instance.PropertyExists(PropertyBagConstants.FailureReason)) { PropertyBagDictionary.Instance.SafeAdd(PropertyBagConstants.FailureReason, exception); } returnValue = false; } return(returnValue); }
public static string ConfigureServerCommandLineArguments() { StringBuilder arguments = new StringBuilder(); // Check to see if this is an uninstall if (PropertyBagDictionary.Instance.PropertyExists(PropertyBagConstants.Uninstall)) { arguments.Append("REMOVE=ALL "); arguments.AppendFormat(CultureInfo.InvariantCulture, "UNINSTALLSERVER = 1 "); } else { String serviceAccount = UserAccountHelper.GetServiceAccount(); arguments.AppendFormat(CultureInfo.InvariantCulture, "SERVERACCOUNTNAME=\"{0}\" ", serviceAccount); // for agent installation if (SetupInputs.Instance.FindItem(SetupInputTags.CmpServiceLocalAccountTag)) { serviceAccount = SetupConstants.LocalSystem; } arguments.AppendFormat(CultureInfo.InvariantCulture, "SERVICEACCOUNT=\"{0}\" ", serviceAccount); // for registry arguments.AppendFormat(CultureInfo.InvariantCulture, "USERNAME=\"{0}\" ", (String)SetupInputs.Instance.FindItem(SetupInputTags.UserNameTag)); arguments.AppendFormat(CultureInfo.InvariantCulture, "SQLPORT=\"{0}\" ", (int)SetupInputs.Instance.FindItem(SetupInputTags.SqlServerPortTag)); string sqlInstanceName = InstallItemCustomDelegates.GetSQLServerInstanceNameStr(false); arguments.AppendFormat(CultureInfo.InvariantCulture, "INSTANCENAME=\"{0}\" ", sqlInstanceName); String dbName = (String)SetupInputs.Instance.FindItem(SetupInputTags.SqlDatabaseNameTag); arguments.AppendFormat(CultureInfo.InvariantCulture, "DATABASENAME=\"{0}\" ", dbName); string partialConnectionString = SetupDatabaseHelper.ConstructConnectionString(sqlInstanceName); string connectionString = String.Format("{0}database={1}", partialConnectionString, dbName); arguments.AppendFormat(CultureInfo.InvariantCulture, "CONNECTIONSTR=\"{0}\" ", connectionString); string sqlMachineName = DnsHelper.GetComputerNameFromFqdnOrNetBios((String)SetupInputs.Instance.FindItem(SetupInputTags.GetSqlMachineNameTag(false))); bool onRemoteMachine = String.Compare(sqlMachineName, Environment.MachineName, true) != 0; arguments.AppendFormat(CultureInfo.InvariantCulture, "ONREMOTESERVER=\"{0}\" ", onRemoteMachine ? 1 : 0); String sqlMachineFqdn = DnsHelper.GetFullyQualifiedName(sqlMachineName); arguments.AppendFormat(CultureInfo.InvariantCulture, "SQLMACHINENAME=\"{0}\" ", sqlMachineName); arguments.AppendFormat(CultureInfo.InvariantCulture, "SQLMACHINEFQDN=\"{0}\" ", sqlMachineFqdn); arguments.AppendFormat(CultureInfo.InvariantCulture, "SETUPLANGUAGE=\"{0}\" ", CultureInfo.CurrentUICulture.Name); String certificateThumbprint = (String)SetupInputs.Instance.FindItem(SetupInputTags.CmpCertificateThumbprintTag); arguments.AppendFormat(CultureInfo.InvariantCulture, "CERTIFICATETHUMBPRINT=\"{0}\" ", "LocalMachine,My," + certificateThumbprint); // Encrypt the password of the worker service so that WAP extensions can use it InputParameter pwd = SetupInputs.Instance.FindItem(SetupInputTags.SqlDBAdminPasswordTag); string passwordAsText = null; if (pwd != null) { IntPtr unmanagedString = IntPtr.Zero; try { unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(pwd); passwordAsText = Marshal.PtrToStringUni(unmanagedString); } finally { Marshal.ZeroFreeGlobalAllocUnicode(unmanagedString); } } string encryptedPassword = String.Format("{0}{1}{2}", "[KText]", UserAccountHelper.EncryptStringUsingLocalCertificate(passwordAsText, certificateThumbprint), "[KText]"); arguments.AppendFormat(CultureInfo.InvariantCulture, "CMPCONTEXTPASSWORDSTRING=\"{0}\" ", encryptedPassword); } return(arguments.ToString()); }
public static string ConfigureWAPExtensionCommonCommandLineArguments() { StringBuilder arguments = new StringBuilder(); // Check to see if this is an uninstall if (PropertyBagDictionary.Instance.PropertyExists(PropertyBagConstants.Uninstall)) { arguments.Append("REMOVE=ALL "); } else { arguments.Append("ADDLOCAL=ProductFeature,ServiceFeature "); // Save the user name to use on the cmp service database String userName = SetupInputs.Instance.FindItem(SetupInputTags.SqlDBAdminNameTag); // Add the SQL database information so that it can be written to the registry and accessed by the services arguments.AppendFormat(CultureInfo.InvariantCulture, "SQLPORT=\"{0}\" ", (int)SetupInputs.Instance.FindItem(SetupInputTags.SqlServerPortTag)); string sqlInstanceName = InstallItemCustomDelegates.GetSQLServerInstanceNameStr(false); arguments.AppendFormat(CultureInfo.InvariantCulture, "INSTANCENAME=\"{0}\" ", sqlInstanceName); arguments.AppendFormat(CultureInfo.InvariantCulture, "WAPSQLPORT=\"{0}\" ", (int)SetupInputs.Instance.FindItem(SetupInputTags.WapSqlServerPortTag)); string wapSqlInstanceName = InstallItemCustomDelegates.GetSQLServerInstanceNameStr(true); arguments.AppendFormat(CultureInfo.InvariantCulture, "WAPINSTANCENAME=\"{0}\" ", wapSqlInstanceName); String dbName = (String)SetupInputs.Instance.FindItem(SetupInputTags.SqlDatabaseNameTag); arguments.AppendFormat(CultureInfo.InvariantCulture, "DATABASENAME=\"{0}\" ", dbName); string partialConnectionString = SetupDatabaseHelper.ConstructWebsiteConnectionString(SetupDatabaseHelper.SqlUsernameDuringInstall, sqlInstanceName); string connectionString = String.Format("{0}database={1}", partialConnectionString, dbName); arguments.AppendFormat(CultureInfo.InvariantCulture, "CMPCONNECTIONSTR=\"{0}\" ", connectionString); String wapDbName = (String)SetupInputs.Instance.FindItem(SetupInputTags.WapSqlDatabaseNameTag); arguments.AppendFormat(CultureInfo.InvariantCulture, "WAPDATABASENAME=\"{0}\" ", wapDbName); string wapPartialConnectionString = SetupDatabaseHelper.ConstructWebsiteConnectionString(SetupDatabaseHelper.SqlUsernameDuringInstall, wapSqlInstanceName); string wapConnectionString = String.Format("{0}database={1}", wapPartialConnectionString, wapDbName); arguments.AppendFormat(CultureInfo.InvariantCulture, "WAPCONNECTIONSTR=\"{0}\" ", wapConnectionString); string sqlMachineName = DnsHelper.GetComputerNameFromFqdnOrNetBios((String)SetupInputs.Instance.FindItem(SetupInputTags.GetSqlMachineNameTag(false))); bool onRemoteMachine = String.Compare(sqlMachineName, Environment.MachineName, StringComparison.OrdinalIgnoreCase) != 0; arguments.AppendFormat(CultureInfo.InvariantCulture, "ONREMOTESERVER=\"{0}\" ", onRemoteMachine ? 1 : 0); string wapSqlMachineName = DnsHelper.GetComputerNameFromFqdnOrNetBios((String)SetupInputs.Instance.FindItem(SetupInputTags.GetSqlMachineNameTag(true))); bool wapOnRemoteMachine = String.Compare(wapSqlMachineName, Environment.MachineName, StringComparison.OrdinalIgnoreCase) != 0; arguments.AppendFormat(CultureInfo.InvariantCulture, "WAPONREMOTESERVER=\"{0}\" ", wapOnRemoteMachine ? 1 : 0); String sqlMachineFqdn = DnsHelper.GetFullyQualifiedName(sqlMachineName); arguments.AppendFormat(CultureInfo.InvariantCulture, "SQLMACHINENAME=\"{0}\" ", sqlMachineName); arguments.AppendFormat(CultureInfo.InvariantCulture, "SQLMACHINEFQDN=\"{0}\" ", sqlMachineFqdn); String wapSqlMachineFqdn = DnsHelper.GetFullyQualifiedName(sqlMachineName); arguments.AppendFormat(CultureInfo.InvariantCulture, "WAPSQLMACHINENAME=\"{0}\" ", wapSqlMachineName); arguments.AppendFormat(CultureInfo.InvariantCulture, "WAPSQLMACHINEFQDN=\"{0}\" ", wapSqlMachineFqdn); String certificateThumbprint = (String)SetupInputs.Instance.FindItem(SetupInputTags.CmpCertificateThumbprintTag); arguments.AppendFormat(CultureInfo.InvariantCulture, "CERTIFICATETHUMBPRINT=\"{0}\" ", "LocalMachine,My," + certificateThumbprint); // Write the cmp database connection string sqlInstanceName = InstallItemCustomDelegates.GetSQLServerInstanceNameStr(false); wapDbName = (String)SetupInputs.Instance.FindItem(SetupInputTags.SqlDatabaseNameTag); wapPartialConnectionString = SetupDatabaseHelper.ConstructWebsiteConnectionString(SetupDatabaseHelper.SqlUsernameDuringInstall, sqlInstanceName); wapConnectionString = String.Format("{0}database={1}", wapPartialConnectionString, wapDbName); arguments.AppendFormat(CultureInfo.InvariantCulture, "CMPCONNECTIONSTR=\"{0}\" ", wapConnectionString); String domain = SetupInputs.Instance.FindItem(SetupInputTags.SqlDBAdminDomainTag); string fullUserName = String.IsNullOrEmpty(domain) ? userName : domain + @"\" + userName; arguments.AppendFormat(CultureInfo.InvariantCulture, "CMPDATABASEUSERNAME=\"{0}\" ", fullUserName); // Encrypt the password of the worker service so that WAP extensions can use it InputParameter pwd = SetupInputs.Instance.FindItem(SetupInputTags.SqlDBAdminPasswordTag); string passwordAsText = null; if (pwd != null) { IntPtr unmanagedString = IntPtr.Zero; try { unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(pwd); passwordAsText = Marshal.PtrToStringUni(unmanagedString); } finally { Marshal.ZeroFreeGlobalAllocUnicode(unmanagedString); } } string encryptedPassword = String.Format("{0}{1}{2}", "[KText]", UserAccountHelper.EncryptStringUsingLocalCertificate(passwordAsText, certificateThumbprint), "[KText]"); arguments.AppendFormat(CultureInfo.InvariantCulture, "CMPCONTEXTPASSWORDSTRING=\"{0}\" ", encryptedPassword); //Write the MicrosoftMgmtSvcStoreContext connection string (part of WAP original installation) wapDbName = SetupConstants.DefaultWapStoreDBName; wapPartialConnectionString = SetupDatabaseHelper.ConstructWebsiteConnectionString(SetupDatabaseHelper.SqlUsernameDuringInstall, sqlInstanceName); wapConnectionString = String.Format("{0}database={1}", wapPartialConnectionString, wapDbName); arguments.AppendFormat(CultureInfo.InvariantCulture, "WAPSTORECONNECTIONSTR=\"{0}\" ", wapConnectionString); X509Krypto krypto = new X509Krypto("My", "LocalMachine", certificateThumbprint); // Encrypt the password of the sql user that will be used by the website to access CMP DB //string encryptedCmpDbPassword = String.Format("{0}{1}{2}", "[KText]", UserAccountHelper.EncryptStringUsingLocalCertificate(SetupDatabaseHelper.SqlDbUserPassword, certificateThumbprint), "[KText]"); string encryptedCmpDbPassword = krypto.EncyptKText(SetupDatabaseHelper.SqlDbUserPassword); arguments.AppendFormat(CultureInfo.InvariantCulture, "CMPDBPASSWORDSTRING=\"{0}\" ", encryptedCmpDbPassword); // Encrypt the password of the sql user that will be used by the website to access CMP WAP DB //string encryptedCmpWapDbPassword = String.Format("{0}{1}{2}", "[KText]", UserAccountHelper.EncryptStringUsingLocalCertificate(SetupDatabaseHelper.SqlDbUserPassword, certificateThumbprint), "[KText]"); string encryptedCmpWapDbPassword = krypto.EncyptKText(SetupDatabaseHelper.SqlDbUserPassword); arguments.AppendFormat(CultureInfo.InvariantCulture, "CMPWAPDBPASSWORDSTRING=\"{0}\" ", encryptedCmpWapDbPassword); // Encrypt the password of the sql user that will be used by the website to access WAP's Microsoft.MgmtSvc.Store DB //string encryptedMgmtStoreDbPassword = String.Format("{0}{1}{2}", "[KText]", UserAccountHelper.EncryptStringUsingLocalCertificate(SetupDatabaseHelper.SqlDbUserPassword, certificateThumbprint), "[KText]"); string encryptedMgmtStoreDbPassword = krypto.EncyptKText(SetupDatabaseHelper.SqlDbUserPassword); arguments.AppendFormat(CultureInfo.InvariantCulture, "MGMTSTOREPASSWORDSTRING=\"{0}\" ", encryptedMgmtStoreDbPassword); } return(arguments.ToString()); }