Я пытаюсь добавить настраиваемое действие в таблицу CustomAction для msi. Проблема в том, что имя столбца Target имеет тип данных Formatted.It is если я пытаюсь вставить строку в столбец, так как запрошенный тип - Formatted.Как вставить значение типа данных «Отформатировано» в базу данных MSI
WindowsInstaller.Installer ins = (WindowsInstaller.Installer)new Installer();
string strFileMsi = @"D:\Pack.msi";
Database db3 = ins.OpenDatabase(strFileMsi, WindowsInstaller.MsiOpenDatabaseMode.msiOpenDatabaseModeDirect);
System.Console.WriteLine("testing 1");
WindowsInstaller.View vw3 = db3.OpenView("INSERT INTO CustomAction (Action,Type,Target) VALUES ('DeleteAction',3174,'\'Option Explicit\n\n'On Error Resume Next\nDim objFSO, strappfolder, WshShell, strprogramfiles, WshProcessenv\nDim intFilesCount, intSubFolderCount, intFileCount, objGetFolder, ObjFolder\nSet objFSO = CreateObject(\"Scripting.FileSystemObject\") \nset WshShell = CreateObject(\"Wscript.Shell\")\nset WshProcessenv = WshShell.Environment(\"Process\")\nstrprogramfiles = WshProcessenv(\"PROGRAMFILES(x86)\")\n\nIf ObjFSO.FileExists(strprogramfiles & \"\\datavision -BMS\\err.txt\") Then\nobjFSO.DeleteFile strprogramfiles & \"\\datavision -BMS\\err.txt\"\nEnd If\n\nIf ObjFSO.FileExists(strprogramfiles & \"\\datavision -BMS\\out.txt\") Then\nobjFSO.DeleteFile strprogramfiles & \"\\datavision -BMS\\out.txt\"\nEnd If\n\n If ObjFSO.FolderExists(strprogramfiles & \"\\datavision -BMS\") Then\n\n Set objFSO = CreateObject(\"Scripting.FileSystemObject\")\n\n Set objGetFolder = objFSO.GetFolder(strprogramfiles & \"\\datavision -BMS\")\n\n ObjFSO.DeleteFolder strprogramfiles & \"\\datavision -BMS\"\n End If')");
vw3.Execute(null);
System.Console.WriteLine("testing");
db3.Commit();
vw3.Close();
Он всегда бросает exception.I может добавить значения в тип действий без каких-либо проблем problem.The поставляется с Target, который имеет форматный типа данных.
Длина текста является issue.But, если я открыть файл Msi в косатке я могу найти сценарии более 255 символов длины . Есть ли что-то, что мы можем сделать внутренне, чтобы вставить скрипт из более чем 255 символов непосредственно в таблицу. –
Проблема заключается в том, что мы вставляем vbs непосредственно в защитный экран, который он обновляет. Есть ли способ сделать аналогичную вещь из кода. –
Ваш код, как правило, правильный. Когда я запускаю такое же обновление с помощью «INSERT INTO CustomAction (Action, Type, Target) VALUES (« DeleteAction », 3174,« немного дерьма »),« он работает. Проблема заключается в длине строки, максимальная - 255. Не глядя на MSI, который генерирует InstallShield, нам не нужно знать, что именно работает, а что нет. – PhilDW