【发布时间】:2016-02-02 12:31:39
【问题描述】:
我正在尝试在 msi 的 CustomAction 表中添加自定义操作。问题是列名 Target 的数据类型为 Formatted。当我尝试将字符串插入列时失败,因为请求类型是格式化的。
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();
它总是抛出异常。我可以毫无问题地将值添加到动作类型中。问题来自于格式化数据类型的目标。
【问题讨论】:
标签: c# windows windows-installer