From f043d0df086596bb879781bd5d6c091dfd1a206e Mon Sep 17 00:00:00 2001 From: James Forshaw Date: Sun, 24 Sep 2017 23:02:38 -0400 Subject: [PATCH 1/5] Added support to specify a CLSID for a scriptlet file. --- DotNetToJScript/Program.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/DotNetToJScript/Program.cs b/DotNetToJScript/Program.cs index b3535fc..05e4668 100644 --- a/DotNetToJScript/Program.cs +++ b/DotNetToJScript/Program.cs @@ -78,7 +78,7 @@ static object BuildLoaderDelegateMscorlib(byte[] assembly) const string DEFAULT_ENTRY_CLASS_NAME = "TestClass"; - static string CreateScriptlet(string script, string script_name, bool register_script) + static string CreateScriptlet(string script, string script_name, bool register_script, Guid clsid) { XmlDocument doc = new XmlDocument(); doc.LoadXml(Properties.Resources.scriptlet_template); @@ -87,10 +87,15 @@ static string CreateScriptlet(string script, string script_name, bool register_s settings.NewLineOnAttributes = true; settings.Encoding = new UTF8Encoding(false); - XmlNode root_node = doc.SelectSingleNode(register_script ? "/package/component/registration" : "/package/component"); + XmlElement reg_node = (XmlElement)doc.SelectSingleNode("/package/component/registration"); + XmlNode root_node = register_script ? reg_node : doc.SelectSingleNode("/package/component"); XmlNode script_node = root_node.AppendChild(doc.CreateElement("script")); script_node.Attributes.Append(doc.CreateAttribute("language")).Value = script_name; script_node.AppendChild(doc.CreateCDataSection(script)); + if (clsid != Guid.Empty) + { + reg_node.SetAttribute("classid", clsid.ToString("B")); + } using (MemoryStream stm = new MemoryStream()) { @@ -161,6 +166,7 @@ static void Main(string[] args) bool enable_debug = false; RuntimeVersion version = RuntimeVersion.None; ScriptLanguage language = ScriptLanguage.JScript; + Guid clsid = Guid.Empty; bool show_help = false; @@ -176,6 +182,7 @@ static void Main(string[] args) { "o=", "Specify output file (default is stdout).", v => output_file = v }, { "c=", String.Format("Specify entry class name (default {0})", entry_class_name), v => entry_class_name = v }, { "s=", "Specify file with additional script. 'o' is created instance.", v => additional_script = File.ReadAllText(v) }, + { "clsid=", "Specify a CLSID for the scriptlet", v => clsid = new Guid(v) }, { "h|help", "Show this message and exit", v => show_help = v != null }, }; @@ -245,7 +252,7 @@ static void Main(string[] args) { throw new ArgumentException(String.Format("{0} generator does not support Scriptlet output", generator.ScriptName)); } - script = CreateScriptlet(script, generator.ScriptName, scriptlet_uninstall); + script = CreateScriptlet(script, generator.ScriptName, scriptlet_uninstall, clsid); } if (!String.IsNullOrEmpty(output_file)) From ab58ad6bb9230379d4ae96e84005da517bfd0c3f Mon Sep 17 00:00:00 2001 From: James Forshaw Date: Sat, 7 Oct 2017 05:02:48 +0100 Subject: [PATCH 2/5] Fixed bug in vbscript debug generation. --- DotNetToJScript/VBScriptGenerator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DotNetToJScript/VBScriptGenerator.cs b/DotNetToJScript/VBScriptGenerator.cs index ad5d595..57a92c7 100644 --- a/DotNetToJScript/VBScriptGenerator.cs +++ b/DotNetToJScript/VBScriptGenerator.cs @@ -28,7 +28,7 @@ public static string GetScriptHeader(RuntimeVersion version, string debug_statem builder.AppendLine("Sub DebugPrint(s)"); if (!String.IsNullOrEmpty(debug_statement)) { - builder.AppendLine("{0} s"); + builder.AppendFormat("{0} s", debug_statement).AppendLine(); } builder.AppendLine("End Sub"); builder.AppendLine(); From 62dea6926addde0c13626b07893647b19651a20b Mon Sep 17 00:00:00 2001 From: James Forshaw Date: Sat, 7 Oct 2017 05:03:16 +0100 Subject: [PATCH 3/5] Use undefined rather than SurrogateSelector to get a null as this can fail in MSHTML based hosts. --- DotNetToJScript/Resources/jscript_template.txt | 3 +-- DotNetToJScript/Resources/vbs_template.txt | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/DotNetToJScript/Resources/jscript_template.txt b/DotNetToJScript/Resources/jscript_template.txt index 4b2bf23..5a79c6b 100644 --- a/DotNetToJScript/Resources/jscript_template.txt +++ b/DotNetToJScript/Resources/jscript_template.txt @@ -18,9 +18,8 @@ try { var stm = base64ToStream(serialized_obj); var fmt = new ActiveXObject('System.Runtime.Serialization.Formatters.Binary.BinaryFormatter'); var al = new ActiveXObject('System.Collections.ArrayList'); - var n = fmt.SurrogateSelector; var d = fmt.Deserialize_2(stm); - al.Add(n); + al.Add(undefined); var o = d.DynamicInvoke(al.ToArray()).CreateInstance(entry_class); %ADDEDSCRIPT% } catch (e) { diff --git a/DotNetToJScript/Resources/vbs_template.txt b/DotNetToJScript/Resources/vbs_template.txt index 6724bd2..4b3028a 100644 --- a/DotNetToJScript/Resources/vbs_template.txt +++ b/DotNetToJScript/Resources/vbs_template.txt @@ -17,7 +17,7 @@ entry_class = "%CLASS%" Dim fmt, al, d, o Set fmt = CreateObject("System.Runtime.Serialization.Formatters.Binary.BinaryFormatter") Set al = CreateObject("System.Collections.ArrayList") -al.Add fmt.SurrogateSelector +al.Add Empty Set d = fmt.Deserialize_2(Base64ToStream(s)) Set o = d.DynamicInvoke(al.ToArray()).CreateInstance(entry_class) From 6c1cdc64f178b68345a73ce3939cc27500653566 Mon Sep 17 00:00:00 2001 From: Nick Landers Date: Sun, 12 Aug 2018 21:00:48 -0600 Subject: [PATCH 4/5] Updated VBA generator to support .NET4+ only environments (stock Win 10) using an activation manifest. Swapped SurrogateSelector for 'Empty' in vba template. Pushed version to 1.0.5 --- DotNetToJScript/DotNetToJScript.csproj | 3 + .../Properties/Resources.Designer.cs | 9 +++ DotNetToJScript/Properties/Resources.resx | 3 + .../Resources/manifest_template.txt | 1 + DotNetToJScript/Resources/vba_template.txt | 25 ++++--- DotNetToJScript/VBAGenerator.cs | 69 +++++++++++++++++-- DotNetToJScript/VBScriptGenerator.cs | 58 ++++++++-------- 7 files changed, 128 insertions(+), 40 deletions(-) create mode 100644 DotNetToJScript/Resources/manifest_template.txt diff --git a/DotNetToJScript/DotNetToJScript.csproj b/DotNetToJScript/DotNetToJScript.csproj index f8538c1..fb6ccfa 100644 --- a/DotNetToJScript/DotNetToJScript.csproj +++ b/DotNetToJScript/DotNetToJScript.csproj @@ -81,6 +81,9 @@ + + +