public void CustomActionData() { string dataString = "Key1=Value1;Key2=;Key3;Key4=Value=4;Key5"; string dataString2 = "Key1=;Key2=Value2;Key3;Key4;Key6=Value;;6=6;Key7=Value7"; CustomActionData data = new CustomActionData(dataString); Assert.AreEqual <string>(dataString, data.ToString()); data["Key1"] = String.Empty; data["Key2"] = "Value2"; data["Key4"] = null; data.Remove("Key5"); data["Key6"] = "Value;6=6"; data["Key7"] = "Value7"; Assert.AreEqual <string>(dataString2, data.ToString()); MyDataClass myData = new MyDataClass(); myData.Member1 = "test1"; myData.Member2 = "test2"; data.AddObject("MyData", myData); string myDataString = data.ToString(); CustomActionData data2 = new CustomActionData(myDataString); MyDataClass myData2 = data2.GetObject <MyDataClass>("MyData"); Assert.AreEqual <MyDataClass>(myData, myData2); List <string> myComplexDataObject = new List <string>(); myComplexDataObject.Add("CValue1"); myComplexDataObject.Add("CValue2"); myComplexDataObject.Add("CValue3"); CustomActionData myComplexData = new CustomActionData(); myComplexData.AddObject("MyComplexData", myComplexDataObject); myComplexData.AddObject("NestedData", data); string myComplexDataString = myComplexData.ToString(); CustomActionData myComplexData2 = new CustomActionData(myComplexDataString); List <string> myComplexDataObject2 = myComplexData2.GetObject <List <string> >("MyComplexData"); Assert.AreEqual <int>(myComplexDataObject.Count, myComplexDataObject2.Count); for (int i = 0; i < myComplexDataObject.Count; i++) { Assert.AreEqual <string>(myComplexDataObject[i], myComplexDataObject2[i]); } data2 = myComplexData2.GetObject <CustomActionData>("NestedData"); Assert.AreEqual <string>(data.ToString(), data2.ToString()); }
public void CustomActionData() { string dataString = "Key1=Value1;Key2=;Key3;Key4=Value=4;Key5"; string dataString2 = "Key1=;Key2=Value2;Key3;Key4;Key6=Value;;6=6;Key7=Value7"; CustomActionData data = new CustomActionData(dataString); Assert.AreEqual<string>(dataString, data.ToString()); data["Key1"] = String.Empty; data["Key2"] = "Value2"; data["Key4"] = null; data.Remove("Key5"); data["Key6"] = "Value;6=6"; data["Key7"] = "Value7"; Assert.AreEqual<string>(dataString2, data.ToString()); MyDataClass myData = new MyDataClass(); myData.Member1 = "test1"; myData.Member2 = "test2"; data.AddObject("MyData", myData); string myDataString = data.ToString(); CustomActionData data2 = new CustomActionData(myDataString); MyDataClass myData2 = data2.GetObject<MyDataClass>("MyData"); Assert.AreEqual<MyDataClass>(myData, myData2); List<string> myComplexDataObject = new List<string>(); myComplexDataObject.Add("CValue1"); myComplexDataObject.Add("CValue2"); myComplexDataObject.Add("CValue3"); CustomActionData myComplexData = new CustomActionData(); myComplexData.AddObject("MyComplexData", myComplexDataObject); myComplexData.AddObject("NestedData", data); string myComplexDataString = myComplexData.ToString(); CustomActionData myComplexData2 = new CustomActionData(myComplexDataString); List<string> myComplexDataObject2 = myComplexData2.GetObject<List<string>>("MyComplexData"); Assert.AreEqual<int>(myComplexDataObject.Count, myComplexDataObject2.Count); for (int i = 0; i < myComplexDataObject.Count; i++) { Assert.AreEqual<string>(myComplexDataObject[i], myComplexDataObject2[i]); } data2 = myComplexData2.GetObject<CustomActionData>("NestedData"); Assert.AreEqual<string>(data.ToString(), data2.ToString()); }
public static ActionResult SwhowPathInstall(Session session) { try { // Active message only for debugging developing // MessageBox.Show("SwhowPathInstall: For debugging , the Debug menu, ' Attach to process ' ate processes : msiexec.exe y rundll32.exe.", // "Depurar: SwhowPathInstall", MessageBoxButtons.OK, MessageBoxIcon.Information); bool isCustomActionData = false; List<DataBasePathTO> listPaths; List<FeatureInstallTO> listFeactureScripts; var listFeactureNames = new List<string>(); InstallUtilities.WriteLogInstall(session, "Initialised SwhowPathInstall ...", null, true); if (session == null) { throw new ArgumentNullException("session"); } // Setup Routes taken from CustomTable Id = " TABLE_DATABASE_PATHS " and set default route listPaths = GetCustomTableDataBasePaths(session, isCustomActionData); // Open the user form to change installation paths database . var frmA = new frmPaths(listPaths); if (frmA.ShowDialog() != DialogResult.OK) { throw new InstallerException("Configuración de rutas de instalación no realizada"); } // / Prepare CustomActionData for deferred CustomAction var data = new CustomActionData(); // Update CustomTable Id = " TABLE_DATABASE_PATHS " with modified routes // UpdateCustomTableDataBasePaths (session , listPaths , isCustomActionData ); // Prepare list of paths to be sent to CustomActionData for deferred CustomAction data.AddObject("DATABASE_PATHS", listPaths); // Add the route list as a session property // Data.Add ( " DATABASE_PATHS " JsonConvert.SerializeObject ( listPaths ) ) ; // To retrieve the serialized property // List <DataBasePathTO> JsonConvert.DeserializeObject listPaths = < List <DataBasePathTO> > ( session.CustomActionData [" DATABASE_PATHS "] ); // Prepare properties to be sent to CustomActionData for deferred CustomAction SetCustomActionData(session, "INSTALLLOCATION", data); SetCustomActionData(session, "DATABASE_SERVERNAME", data); SetCustomActionData(session, "DATABASE_NAME", data); SetCustomActionData(session, "DATABASE_WINDOWSAUTHENTICATION", data); SetCustomActionData(session, "DATABASE_AUTHENTICATEDATABASE", data); SetCustomActionData(session, "DATABASE_EXECUTESCRIPTS", data); SetCustomActionData(session, "DATABASE_USERNAME", data); SetCustomActionData(session, "DATABASE_PASSWORD", data); SetCustomActionData(session, "DATABASE_PROXYPASSWORD", data); SetCustomActionData(session, "DATABASE_MAILPROFILENAME", data); SetCustomActionData(session, "DATABASE_MAILBOX", data); SetCustomActionData(session, "DATABASE_MAILIP", data); SetCustomActionData(session, "DATABASE_OPERATORNAMENAME", data); SetCustomActionData(session, "DATABASE_OPERATORMAILBOX", data); SetCustomActionData(session, "DATABASE_PROXYWINDOWSUSER", data); // / Database Scripts to be installed, taken from the MSI Feature using sql files * . foreach (FeatureInfo fi in session.Features) { if (fi.RequestState == InstallState.Local || fi.RequestState == InstallState.Source || fi.RequestState == InstallState.Default) { listFeactureNames.Add(fi.Name); InstallUtilities.WriteLogInstall(session, "FEATURE fi.Name: " + fi.Name + ", fi.CurrentState: " + fi.CurrentState + ", fi.RequestState:" + fi.RequestState, null, false); } } listFeactureScripts = GetFeatureScriptDataBase(session, listFeactureNames); data.AddObject("DATABASE_FEACTURESCRIPTS", listFeactureScripts); // Add all the properties in a single variable //session["CUSTOMACTIONDATA_PROPERTIES"] = data.ToString(); // Schedule deferred actions session.DoAction("CA_DataBaseExecuteScripts", data); return ActionResult.Success; } catch (Exception ex) { InstallUtilities.WriteLogInstall(session, "Exception to establish installation paths for database.", ex, true); return ActionResult.Failure; } }
public static ActionResult SwhowPathInstall(Session session) { try { bool isCustomActionData = false; List <DataBasePathTO> listPaths; List <FeactureInstallTO> listFeactureScripts; List <string> listFeactureNames = new List <string>(); InstallUtilities.WriteLogInstall(session, "Starting SwhowPathInstall ...", null, true); if (session == null) { throw new ArgumentNullException("session"); } listPaths = GetCustomTableDataBasePaths(session, isCustomActionData); CustomActionData data = new CustomActionData(); data.AddObject <List <DataBasePathTO> >("DATABASE_PATHS", listPaths); SetCustomActionData(session, "INSTALLLOCATION", data); SetCustomActionData(session, "DATABASE_SERVERNAME", data); SetCustomActionData(session, "DATABASE_NAME", data); SetCustomActionData(session, "DATABASE_WINDOWSAUTHENTICATION", data); SetCustomActionData(session, "DATABASE_AUTHENTICATEDATABASE", data); SetCustomActionData(session, "DATABASE_EXECUTESCRIPTS", data); SetCustomActionData(session, "DATABASE_USERNAME", data); SetCustomActionData(session, "DATABASE_PASSWORD", data); //SetCustomActionData(session, "DATABASE_PROXYPASSWORD", data); //SetCustomActionData(session, "DATABASE_MAILPROFILENAME", data); //SetCustomActionData(session, "DATABASE_MAILBOX", data); //SetCustomActionData(session, "DATABASE_MAILIP", data); //SetCustomActionData(session, "DATABASE_OPERATORNAMENAME", data); //SetCustomActionData(session, "DATABASE_OPERATORMAILBOX", data); //SetCustomActionData(session, "DATABASE_PROXYWINDOWSUSER", data); foreach (FeatureInfo fi in session.Features) { if (fi.RequestState == InstallState.Local || fi.RequestState == InstallState.Source || fi.RequestState == InstallState.Default) { listFeactureNames.Add(fi.Name); InstallUtilities.WriteLogInstall(session, "FEATURE fi.Name: " + fi.Name + ", fi.CurrentState: " + fi.CurrentState + ", fi.RequestState:" + fi.RequestState, null, false); } } listFeactureScripts = GetFeactureScriptDataBase(session, listFeactureNames); data.AddObject <List <FeactureInstallTO> >("DATABASE_FEACTURESCRIPTS", listFeactureScripts); //session["CUSTOMACTIONDATA_PROPERTIES"] = data.ToString(); session.DoAction("CA_DataBaseExecuteScripts", data); return(ActionResult.Success); } catch (Exception ex) { InstallUtilities.WriteLogInstall(session, "Exception to establish routes database installation", ex, true); return(ActionResult.Failure); } }
void Check(IActionWorker worker, bool serverMode, bool clientMode) { CustomActionData customActionData = new CustomActionData(); Microsoft.Deployment.WindowsInstaller.Fakes.ShimSession.AllInstances.CustomActionDataGet = delegate { return customActionData; }; // Проверка режима сервера. SetValue(worker, false); customActionData.AddObject<UIType>(SessionUITypeGetterExtension.keyUIType, UIType.Server); worker.Execute(); Assert.AreEqual(serverMode, GetValue(worker), worker.GetType().ToString() + " Server"); // Проверка режима клиента. SetValue(worker, false); customActionData.Clear(); customActionData.AddObject<UIType>(SessionUITypeGetterExtension.keyUIType, UIType.Client); worker.Execute(); Assert.AreEqual(clientMode, GetValue(worker), worker.GetType().ToString() + " Client"); }
private void Deleting() { string server; string database; // Получаем имена сервера и базы данных. NameViewConverter.ParseNameView(sessionProp.SelectedDatabase, out server, out database); // Получаем информацию об этой базе. DatabaseInfo info = Session.GetService<ISessionDatabaseInfoExtension>().GetDatabaseInfos().FirstOrDefault(v => v.Server == server && v.Name == database); // Если база данных существовала (т.е. не добавлена пользователем), // то запомним ее в специальном списке существующих баз данных (в элементе управления). // Так как это структура, то если ничего не будет найдено в запросе LINQ, поле Server не будет проинициализирован. if (!string.IsNullOrEmpty(info.Server) && !info.IsNew) { // Для вывода элемента будем использовать имя, версию и признак поддержки. // Для значения сохраним, в виде строки, сериализованный DatabaseInfo в CustomActionData. WixComboBox combo = new WixComboBox(Session, sessionProp.ExistControlProperty); // Здесь аккуратнее, так как ComboBox не отображает некоторые символы. string displayedName = sessionProp.SelectedDatabase + " " + info.Version + (info.IsRequiringUpdate ? "" : " (не поддерживается)"); CustomActionData customActionData = new CustomActionData(); customActionData.AddObject<DatabaseInfo>(typeof(DatabaseInfo).ToString(), info); combo.AddItem(new WixComboItem(displayedName, customActionData.ToString())); // Значение по умолчанию. combo.SelectedValue = combo.Items.Count > 0 ? combo.Items[0].Value : ""; } Session.GetService<ISessionDatabaseInfoExtension>().DeleteDatabaseInfo(server, database); }
public static ActionResult SwhowPathInstall(Session session) { try { // Active message only for debugging developing // MessageBox.Show("SwhowPathInstall: For debugging , the Debug menu, ' Attach to process ' ate processes : msiexec.exe y rundll32.exe.", // "Depurar: SwhowPathInstall", MessageBoxButtons.OK, MessageBoxIcon.Information); bool isCustomActionData = false; List <DataBasePathTO> listPaths; List <FeatureInstallTO> listFeactureScripts; var listFeactureNames = new List <string>(); InstallUtilities.WriteLogInstall(session, "Initialised SwhowPathInstall ...", null, true); if (session == null) { throw new ArgumentNullException("session"); } // Setup Routes taken from CustomTable Id = " TABLE_DATABASE_PATHS " and set default route listPaths = GetCustomTableDataBasePaths(session, isCustomActionData); // Open the user form to change installation paths database . var frmA = new frmPaths(listPaths); if (frmA.ShowDialog() != DialogResult.OK) { throw new InstallerException("Configuración de rutas de instalación no realizada"); } // / Prepare CustomActionData for deferred CustomAction var data = new CustomActionData(); // Update CustomTable Id = " TABLE_DATABASE_PATHS " with modified routes // UpdateCustomTableDataBasePaths (session , listPaths , isCustomActionData ); // Prepare list of paths to be sent to CustomActionData for deferred CustomAction data.AddObject("DATABASE_PATHS", listPaths); // Add the route list as a session property // Data.Add ( " DATABASE_PATHS " JsonConvert.SerializeObject ( listPaths ) ) ; // To retrieve the serialized property // List <DataBasePathTO> JsonConvert.DeserializeObject listPaths = < List <DataBasePathTO> > ( session.CustomActionData [" DATABASE_PATHS "] ); // Prepare properties to be sent to CustomActionData for deferred CustomAction SetCustomActionData(session, "INSTALLLOCATION", data); SetCustomActionData(session, "DATABASE_SERVERNAME", data); SetCustomActionData(session, "DATABASE_NAME", data); SetCustomActionData(session, "DATABASE_WINDOWSAUTHENTICATION", data); SetCustomActionData(session, "DATABASE_AUTHENTICATEDATABASE", data); SetCustomActionData(session, "DATABASE_EXECUTESCRIPTS", data); SetCustomActionData(session, "DATABASE_USERNAME", data); SetCustomActionData(session, "DATABASE_PASSWORD", data); SetCustomActionData(session, "DATABASE_PROXYPASSWORD", data); SetCustomActionData(session, "DATABASE_MAILPROFILENAME", data); SetCustomActionData(session, "DATABASE_MAILBOX", data); SetCustomActionData(session, "DATABASE_MAILIP", data); SetCustomActionData(session, "DATABASE_OPERATORNAMENAME", data); SetCustomActionData(session, "DATABASE_OPERATORMAILBOX", data); SetCustomActionData(session, "DATABASE_PROXYWINDOWSUSER", data); // / Database Scripts to be installed, taken from the MSI Feature using sql files * . foreach (FeatureInfo fi in session.Features) { if (fi.RequestState == InstallState.Local || fi.RequestState == InstallState.Source || fi.RequestState == InstallState.Default) { listFeactureNames.Add(fi.Name); InstallUtilities.WriteLogInstall(session, "FEATURE fi.Name: " + fi.Name + ", fi.CurrentState: " + fi.CurrentState + ", fi.RequestState:" + fi.RequestState, null, false); } } listFeactureScripts = GetFeatureScriptDataBase(session, listFeactureNames); data.AddObject("DATABASE_FEACTURESCRIPTS", listFeactureScripts); // Add all the properties in a single variable //session["CUSTOMACTIONDATA_PROPERTIES"] = data.ToString(); // Schedule deferred actions session.DoAction("CA_DataBaseExecuteScripts", data); return(ActionResult.Success); } catch (Exception ex) { InstallUtilities.WriteLogInstall(session, "Exception to establish installation paths for database.", ex, true); return(ActionResult.Failure); } }
public static ActionResult ExecuteSQLScripts(Session session) { var data = new CustomActionData(); try { // Active message only for debugging developing // MessageBox.Show("SwhowPathInstall: For debugging , the Debug menu, ' Attach to process ' ate processes : msiexec.exe y rundll32.exe.", // "Depurar: SwhowPathInstall", MessageBoxButtons.OK, MessageBoxIcon.Information); //bool isCustomActionData = false; //List<DataBasePathTO> listPaths; List <FeatureInstallTO> listFeactureScripts; var listFeactureNames = new List <string>(); InstallUtilities.WriteLogInstall(session, "Initialised SwhowPathInstall ...", null, true); if (session == null) { throw new ArgumentNullException("session"); } // Setup Routes taken from CustomTable Id = " TABLE_DATABASE_PATHS " and set default route //listPaths = GetCustomTableDataBasePaths(session, isCustomActionData); // Open the user form to change installation paths database . /* * var frmA = new frmPaths(listPaths); * if (frmA.ShowDialog() != DialogResult.OK) * { * MessageBox.Show("Error"); * throw new InstallerException("Configuración de rutas de instalación no realizada"); * } */ // / Prepare CustomActionData for deferred CustomAction // Update CustomTable Id = " TABLE_DATABASE_PATHS " with modified routes // UpdateCustomTableDataBasePaths (session , listPaths , isCustomActionData ); // Prepare list of paths to be sent to CustomActionData for deferred CustomAction //data.AddObject("DATABASE_PATHS", listPaths); // Add the route list as a session property // Data.Add ( " DATABASE_PATHS " JsonConvert.SerializeObject ( listPaths ) ) ; // To retrieve the serialized property // List <DataBasePathTO> JsonConvert.DeserializeObject listPaths = < List <DataBasePathTO> > ( session.CustomActionData [" DATABASE_PATHS "] ); // Prepare properties to be sent to CustomActionData for deferred CustomAction SetCustomActionData(session, "INSTALLLOCATION", data); SetCustomActionData(session, "DATABASE_SERVERNAME", data); SetCustomActionData(session, "DATABASE_NAME", data); SetCustomActionData(session, "DATABASE_WINDOWSAUTHENTICATION", data); SetCustomActionData(session, "DATABASE_AUTHENTICATEDATABASE", data); SetCustomActionData(session, "DATABASE_EXECUTESCRIPTS", data); SetCustomActionData(session, "DATABASE_USERNAME", data); SetCustomActionData(session, "DATABASE_PASSWORD", data); SetCustomActionData(session, "DATABASE_PROXYPASSWORD", data); SetCustomActionData(session, "DATABASE_MAILPROFILENAME", data); SetCustomActionData(session, "DATABASE_MAILBOX", data); SetCustomActionData(session, "DATABASE_MAILIP", data); SetCustomActionData(session, "DATABASE_OPERATORNAMENAME", data); SetCustomActionData(session, "DATABASE_OPERATORMAILBOX", data); SetCustomActionData(session, "DATABASE_PROXYWINDOWSUSER", data); // / Database Scripts to be installed, taken from the MSI Feature using sql files * . foreach (FeatureInfo fi in session.Features) { if (fi.RequestState == InstallState.Local || fi.RequestState == InstallState.Source || fi.RequestState == InstallState.Default) { listFeactureNames.Add(fi.Name); InstallUtilities.WriteLogInstall(session, "FEATURE fi.Name: " + fi.Name + ", fi.CurrentState: " + fi.CurrentState + ", fi.RequestState:" + fi.RequestState, null, false); } } listFeactureScripts = GetFeatureScriptDataBase(session, listFeactureNames); data.AddObject("DATABASE_FEACTURESCRIPTS", listFeactureScripts); // Add all the properties in a single variable //session["CUSTOMACTIONDATA_PROPERTIES"] = data.ToString(); // Schedule deferred actions //session.DoAction("CA_DataBaseExecuteScripts", data); //return ActionResult.Success; } catch (Exception ex) { InstallUtilities.WriteLogInstall(session, "Exception to establish installation paths for database.", ex, true); return(ActionResult.Failure); } try { // Active message only for debugging developing // MessageBox.Show ( " ExecuteSQLScripts : To debug in VS Net, on the Debug menu, ' Attach to process ' // Msiexec.exe and rundll32.exe " DEBUG : ExecuteSQLScripts " , MessageBoxButtons.OK , MessageBoxIcon.Information ); MessageResult iResult; string sInstallLocation, sServer, sDatabase, sMessage; int iTotalTicks, iTickIncrement = 1; bool isCustomActionData = true; if (session == null) { throw new ArgumentNullException("session"); } // sInstallLocation = GetSessionProperty(session, "INSTALLLOCATION", isCustomActionData); sServer = GetSessionProperty(session, "DATABASE_SERVERNAME", false); //PRESET TO STANDARD DATABASE NAME //sDatabase = GetSessionProperty(session, "DATABASE_NAME", isCustomActionData); //List<DataBasePathTO> listPaths = GetCustomTableDataBasePaths(session, isCustomActionData); var listF = data.GetObject <List <FeatureInstallTO> >("DATABASE_FEACTURESCRIPTS"); iTotalTicks = listF.Count; InstallUtilities.WriteLogInstall(session, "Initialised ExecuteSQLScripts ...", null, true); iResult = InstallProgress.ResetProgress(session, iTotalTicks); if (iResult == MessageResult.Cancel) { return(ActionResult.UserExit); } sMessage = "Executed Script on SQL Server: " + sServer; iResult = InstallProgress.DisplayStatusActionStart(session, sMessage, sMessage, "[1] / [2]: [3]"); if (iResult == MessageResult.Cancel) { return(ActionResult.UserExit); } iResult = InstallProgress.NumberOfTicksPerActionData(session, iTickIncrement, true); if (iResult == MessageResult.Cancel) { return(ActionResult.UserExit); } for (int i = 0; i < listF.Count; i++) { ExecuteSQLScript(session, listF[i].DirectoryPath, listF[i].FileName, isCustomActionData); iResult = InstallProgress.DisplayActionData3(session, (i + 1).ToString(), iTotalTicks.ToString(), InstallUtilities.Right(Path.Combine(listF[i].DirectoryPath, listF[i].FileName), 200)); if (iResult == MessageResult.Cancel) { return(ActionResult.UserExit); } } } catch (Exception ex) { InstallUtilities.WriteLogInstall(session, @"Exception executing script against the database", ex, true); MessageBox.Show(ex.Message, @"Error while executing scripts", MessageBoxButtons.OK, MessageBoxIcon.Error); return(ActionResult.Failure); } return(ActionResult.Success); }