wixgem 0.108.0 → 0.110.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/example/example.msi +0 -0
- data/example/example.msm +0 -0
- data/lib/registry_entries.rb +68 -0
- data/lib/registry_key.rb +81 -0
- data/lib/wixgem.rb +2 -3
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 10e61c62d03979266feff1ade5dcef49603123b87b8fa6e6103466783c9ef203
|
4
|
+
data.tar.gz: 3ceb485b6e95b995d43d09e53fa89738a533d70ac1b3bec2d5390f8c3b5954ea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 36d3b66c9e9a27ab5850bbc429a3f8e6148915bf9df77a612dbc797cc01ee872fccdc4f942a6c75b8eeb368713e32ecdf09bdd54f73a1027ff993d0e59f5e4dc
|
7
|
+
data.tar.gz: ece434c79d788ee69e20df13ce90cf31d7224db1c7fab0ad66381de28e3210125efb7ba50965965b5f8e00f18bc91273f0f26b508da2009ba1c1ceb1aabaa96d
|
data/example/example.msi
CHANGED
Binary file
|
data/example/example.msm
CHANGED
Binary file
|
@@ -0,0 +1,68 @@
|
|
1
|
+
class RegistryEntries
|
2
|
+
def initialize(hash)
|
3
|
+
@hash = hash
|
4
|
+
end
|
5
|
+
|
6
|
+
def create_key(xml_doc)
|
7
|
+
raise "RegistryEntry hash is required to have a :root key" unless(@hash.has_key?(:root))
|
8
|
+
raise "RegistryEntry hash is required to have a :path key" unless(@hash.has_key?(:path))
|
9
|
+
raise "RegistryEntry hash is required to have a :key key" unless(@hash.has_key?(:key))
|
10
|
+
raise "Key hash is required to have a :name key" unless(@hash[:key].has_key?(:name))
|
11
|
+
raise "Key hash is required to have a :value key" unless(@hash[:value].has_key?(:name))
|
12
|
+
raise "Key hash is required to have a :value key" unless(@hash[:value_type].has_key?(:name))
|
13
|
+
|
14
|
+
service_exe = @hash[:service_exe]
|
15
|
+
raise "Service #{file} does not exist" unless(File.exists?(service_exe))
|
16
|
+
|
17
|
+
file_elements = REXML::XPath.match(xml_doc, "//File[@Source='.\\#{service_exe.gsub(/\//,'\\')}']")
|
18
|
+
raise "Service #{@file} does not match a 'File' element with a 'Source' attribute in the wix generated wix file" if(file_elements.length == 0)
|
19
|
+
|
20
|
+
service_exe_element = file_elements[0]
|
21
|
+
service_exe_element.attributes['KeyPath']='yes'
|
22
|
+
|
23
|
+
create_service_element(xml_doc, service_exe_element)
|
24
|
+
|
25
|
+
return xml_doc
|
26
|
+
end
|
27
|
+
|
28
|
+
def set(xml_doc, input)
|
29
|
+
file = file.gsub(/\//,'\\')
|
30
|
+
file_elements = REXML::XPath.match(@xml_doc, "//File[@Source='.\\#{file}']")
|
31
|
+
raise "Unable to find file '#{file}' to associate with extension '#{extension}'" if(file_elements.nil? || file_elements.size != 1)
|
32
|
+
|
33
|
+
file_parent = file_elements[0].parent
|
34
|
+
|
35
|
+
app=File.basename(file)
|
36
|
+
# App Paths to support Start,Run -> "myapp"
|
37
|
+
#<RegistryValue Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\MyApp.exe" Value="[!MyApp.exe]" Type="string" />
|
38
|
+
file_parent.add_element 'RegistryValue', { 'Root' => 'HKLM', 'Key' => "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\#{app}",
|
39
|
+
'Value' => "[INSTALLDIR]#{file}", 'Type' => 'string' }
|
40
|
+
#<RegistryValue Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\MyApp.exe" Name="Path" Value="[APPLICATIONFOLDER]" Type="string" />
|
41
|
+
file_parent.add_element 'RegistryValue', { 'Root' => 'HKLM', 'Key' => "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\#{app}",
|
42
|
+
'Name' => 'Path', 'Value' => '[INSTALLDIR]', 'Type' => 'string' }
|
43
|
+
|
44
|
+
# Extend to the "open with" list + Win7 jump menu pinning
|
45
|
+
#<RegistryValue Root="HKLM" Key="SOFTWARE\Classes\Applications\MyApp.exe\SupportedTypes" Name=".xyz" Value="" Type="string" />
|
46
|
+
file_parent.add_element 'RegistryValue', { 'Root' => 'HKLM', 'Key' => "SOFTWARE\\Classes\\Applications\\#{app}\\SupportedTypes",
|
47
|
+
'Name' => extension, 'Value' => '', 'Type' => 'string' }
|
48
|
+
#<RegistryValue Root="HKLM" Key="SOFTWARE\Classes\Applications\MyApp.exe\shell\open" Name="FriendlyAppName" Value="!(loc.ApplicationName)" Type="string" />
|
49
|
+
file_parent.add_element 'RegistryValue', { 'Root' => 'HKLM', 'Key' => "SOFTWARE\\Classes\\Applications\\#{app}\\shell\\open\\command",
|
50
|
+
'Value' => "[INSTALLDIR]#{file} \"%1\"", 'Type' => 'string' }
|
51
|
+
|
52
|
+
# MyApp.Document ProgID
|
53
|
+
#<RegistryValue Root="HKLM" Key="SOFTWARE\Classes\MyApp.Document" Name="FriendlyTypeName" Value="!(loc.DescXYZ)" Type="string" />
|
54
|
+
file_parent.add_element 'RegistryValue', { 'Root' => 'HKLM', 'Key' => "SOFTWARE\\Classes\\#{File.basename(app, '.exe')}.Document",
|
55
|
+
'Name' => 'Aim Project File', 'Value' => "[INSTALLDIR]#{app} \"%1\"", 'Type' => 'string' }
|
56
|
+
|
57
|
+
#<ProgId Id="MyApp.Document" Description="!(loc.DescXYZ)" Icon="filetype.ico" Advertise="yes">
|
58
|
+
# <Extension Id="xyz">
|
59
|
+
# <Verb Id="open" Command="!(loc.ExplorerMenuOpenXYZ)" Argument=""%1"" />
|
60
|
+
# <MIME Advertise="yes" ContentType="application/xyz" Default="yes" />
|
61
|
+
# </Extension>
|
62
|
+
#</ProgId>
|
63
|
+
prog_id = file_parent.add_element 'ProgId', { 'Id' => "#{File.basename(app, '.exe')}.Document", 'Description' => "Aim project file",
|
64
|
+
'Advertise' => 'yes'}
|
65
|
+
ext = prog_id.add_element 'Extension', { 'Id' => extension.gsub(/\./, '') }
|
66
|
+
ext.add_element 'Verb', { 'Id' => 'open', 'Command' => "[INSTALLDIR]#{app}", 'Argument' => "\"%1\"" }
|
67
|
+
end
|
68
|
+
end
|
data/lib/registry_key.rb
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
require 'SecureRandom'
|
3
|
+
|
4
|
+
module Wixgem
|
5
|
+
|
6
|
+
class CustomAction
|
7
|
+
def initialize(xml_doc, input)
|
8
|
+
@xml_doc = xml_doc
|
9
|
+
@input = input
|
10
|
+
end
|
11
|
+
def add(custom_action)
|
12
|
+
unless(custom_action.key?(:file) || custom_action.key?(:binary_key) || custom_action.key?(:property) || custom_action.key?(:directory))
|
13
|
+
raise 'Currently, only supported custom actions work with installed executable, binary key, property, or directory'
|
14
|
+
end
|
15
|
+
|
16
|
+
file_key=nil
|
17
|
+
if(custom_action.key?(:file))
|
18
|
+
install_path = ".\\#{custom_action[:file].gsub(/\//,'\\')}"
|
19
|
+
file_elements = REXML::XPath.match(@xml_doc, "//File[@Source='#{install_path}']")
|
20
|
+
raise "Unable to locate installation file '#{custom_action[:file]} for custom action'" if(file_elements.nil? || (file_elements.size == 0))
|
21
|
+
|
22
|
+
file_key = file_elements[0].attributes['Id']
|
23
|
+
end
|
24
|
+
|
25
|
+
id = "ca_#{SecureRandom.uuid.gsub(/-/,'')}"
|
26
|
+
id = custom_action[:id] if(custom_action.key?(:id))
|
27
|
+
|
28
|
+
impersonate = 'yes'
|
29
|
+
impersonate = custom_action[:impersonate] if(custom_action.key?(:impersonate))
|
30
|
+
|
31
|
+
condition='NOT Installed AND NOT REMOVE'
|
32
|
+
condition='1' if(custom_action.key?(:binary_key))
|
33
|
+
condition = custom_action[:condition] if(custom_action.key?(:condition))
|
34
|
+
|
35
|
+
execute='deferred'
|
36
|
+
execute = custom_action[:execute] if(custom_action.key?(:execute))
|
37
|
+
|
38
|
+
ret='check'
|
39
|
+
ret = custom_action[:return] if(custom_action.key?(:return))
|
40
|
+
|
41
|
+
wix_element = REXML::XPath.match(@xml_doc, "/Wix")[0]
|
42
|
+
fragment = wix_element.add_element 'Fragment'
|
43
|
+
|
44
|
+
action = fragment.add_element 'CustomAction', { 'Id' => id, 'Impersonate' => impersonate, 'Return' => ret, 'HideTarget' => 'no', 'Execute' => execute }
|
45
|
+
if(custom_action.key?(:binary_key))
|
46
|
+
action.attributes['BinaryKey'] = custom_action[:binary_key]
|
47
|
+
else
|
48
|
+
action.attributes['FileKey'] = file_key
|
49
|
+
end
|
50
|
+
|
51
|
+
action.attributes['Directory'] = custom_action[:directory] if(custom_action.key?(:directory))
|
52
|
+
action.attributes['ExeCommand'] = custom_action[:exe_command] if(custom_action.key?(:exe_command))
|
53
|
+
action.attributes['DllEntry'] = custom_action[:dll_entry] if(custom_action.key?(:dll_entry))
|
54
|
+
|
55
|
+
if(custom_action.key?(:property))
|
56
|
+
raise "Custom action property '#{custom_action[:property]} must have a value!" unless(custom_action.key?(:value))
|
57
|
+
action.attributes.delete('ExeCommand')
|
58
|
+
action.attributes.delete('Return')
|
59
|
+
action.attributes['Property'] = custom_action[:property]
|
60
|
+
action.attributes['Value'] = custom_action[:value]
|
61
|
+
end
|
62
|
+
|
63
|
+
install_execute_sequence = fragment.add_element 'InstallExecuteSequence'
|
64
|
+
|
65
|
+
custom_action[:before] = 'InstallFinalize' if(!custom_action.key?(:after) && !custom_action.key?(:before))
|
66
|
+
if(custom_action.key?(:after))
|
67
|
+
action = install_execute_sequence.add_element 'Custom', { 'Action' => id, 'After' => custom_action[:after] }
|
68
|
+
action.text = condition
|
69
|
+
else
|
70
|
+
action = install_execute_sequence.add_element 'Custom', { 'Action' => id, 'Before' => custom_action[:before] }
|
71
|
+
action.text = condition
|
72
|
+
end
|
73
|
+
|
74
|
+
control=nil
|
75
|
+
elements = REXML::XPath.match(@xml_doc, "/Wix/Product")
|
76
|
+
elements = REXML::XPath.match(@xml_doc, "/Wix/Module") if(elements.nil? || elements.size == 0)
|
77
|
+
|
78
|
+
elements[0].add_element 'CustomActionRef', { 'Id' => id }
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
data/lib/wixgem.rb
CHANGED
@@ -410,7 +410,7 @@ class Wix
|
|
410
410
|
|
411
411
|
filename = wxs_file
|
412
412
|
if(install_files.index(file) == 0)
|
413
|
-
execute_heat(input, "file \"#{windows_path}\" -v #{template_option} -cg
|
413
|
+
execute_heat(input, "file \"#{windows_path}\" -v #{template_option} -cg InstallationFiles -gg -nologo -srd -o \"#{filename}\"")
|
414
414
|
else
|
415
415
|
filename = File.basename(wxs_file).gsub('.wxs', "-#{wxs_files.length}.wxs")
|
416
416
|
execute_heat(input, "file \"#{windows_path}\" -v -template fragment -gg -nologo -srd -o \"#{filename}\"")
|
@@ -461,7 +461,7 @@ class Wix
|
|
461
461
|
end
|
462
462
|
|
463
463
|
def self.execute_heat_dir(wxs_file, input, template_option)
|
464
|
-
execute_heat(input,"dir . #{template_option} -cg
|
464
|
+
execute_heat(input,"dir . #{template_option} -cg InstallationFiles -gg -nologo -srd -o \"#{wxs_file}\"")
|
465
465
|
end
|
466
466
|
|
467
467
|
def self.create_wxs_file(wxs_file, input, ext)
|
@@ -553,7 +553,6 @@ class Wix
|
|
553
553
|
wix_bin_dir = "#{wix_install_path}/tools" unless(Dir.exists?(wix_bin_dir))
|
554
554
|
raise "Unable to locate candle.exe. Expecting to have a sub directory bin or tools in the wix installtion directory: #{wix_install_path}" unless(Dir.exists?(wix_bin_dir))
|
555
555
|
|
556
|
-
|
557
556
|
ext_args = "-ext WixUtilExtension -ext WixNetfxExtension -ext WixUIExtension"
|
558
557
|
candle_cmd = Execute.new("\"#{wix_bin_dir}/candle.exe\" #{ext_args} -out \"#{wixobj_file}\" \"#{wxs_file}\"", { quiet: true })
|
559
558
|
candle_cmd.execute
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wixgem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.110.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin Marshall
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: execute
|
@@ -140,6 +140,8 @@ files:
|
|
140
140
|
- lib/associate_extension.rb
|
141
141
|
- lib/custom_action.rb
|
142
142
|
- lib/file.rb
|
143
|
+
- lib/registry_entries.rb
|
144
|
+
- lib/registry_key.rb
|
143
145
|
- lib/service.rb
|
144
146
|
- lib/shortcut.rb
|
145
147
|
- lib/temp_directory.rb
|
@@ -163,7 +165,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
163
165
|
- !ruby/object:Gem::Version
|
164
166
|
version: '0'
|
165
167
|
requirements: []
|
166
|
-
rubygems_version: 3.2.
|
168
|
+
rubygems_version: 3.2.15
|
167
169
|
signing_key:
|
168
170
|
specification_version: 4
|
169
171
|
summary: Simple Ruby interface to facilitate working with Wix Toolset
|