wixgem 0.48.0 → 0.49.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/lib/WindowsInstaller_hold.rb +156 -0
- data/lib/command.rb +1 -0
- data/lib/wixgem.rb +1 -0
- metadata +14 -13
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 061afe43dfa14c1ecd5d5b2a48babc203e36866e
|
|
4
|
+
data.tar.gz: 4e4593073b5edd42f7535603b5eef5a87cfb1cc3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: aad6ca671d146d3014ceaa699a7e8ed6cf846d315951331fbacf0bb88760083627f92d3d0478109fa87f4ca69749d6560ff63d8a19e130ac4d093c9203f2988d
|
|
7
|
+
data.tar.gz: 8e2726e75b477f13b12c58f50e2f3d9e95741360c8f9e2c541029857d60f92acca34cd7d7053504291288be24d66d2620ad5bc6cc59c624ba3ced2e6c2ad5118
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
require 'win32ole'
|
|
2
|
+
require 'dev_tasks'
|
|
3
|
+
|
|
4
|
+
module Wixgem
|
|
5
|
+
|
|
6
|
+
class WindowsInstaller
|
|
7
|
+
def self.install(msi_file)
|
|
8
|
+
msi_file = msi_file.gsub(/\//, '\\')
|
|
9
|
+
raise "#{msi_file} is already installed" if(WindowsInstaller.installed?(msi_file))
|
|
10
|
+
execute("msiexec.exe /i #{msi_file}")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.uninstall(msi_file)
|
|
14
|
+
raise "#{msi_file} does not exist!" unless(File.exists?(msi_file))
|
|
15
|
+
|
|
16
|
+
info = msi_properties(installer, msi_file)
|
|
17
|
+
uninstall_product_code(info['ProductCode'])
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def self.uninstall_product_name(product_name)
|
|
21
|
+
raise "#{product_name} is not installed" unless(product_name_installed?(product_name))
|
|
22
|
+
uninstall_product_code(product_code_from_product_name(product_name))
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.uninstall_product_code(product_code)
|
|
26
|
+
raise "#{product_code} is not installed" unless(product_code_installed?(product_code))
|
|
27
|
+
execute("msiexec.exe /quiet /x #{product_code}")
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def self.msi_installed?(msi_file)
|
|
31
|
+
info = msi_properties(msi_file)
|
|
32
|
+
return product_code_installed?(info['ProductCode'])
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.product_name_installed?(product_name)
|
|
36
|
+
installer = WIN32OLE.new('WindowsInstaller.Installer')
|
|
37
|
+
installer.Products.each { |prod_code|
|
|
38
|
+
name = installer.ProductInfo(prod_code, "ProductName")
|
|
39
|
+
return true if (product_name == name)
|
|
40
|
+
}
|
|
41
|
+
return false
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def self.product_code_installed?(product_code)
|
|
45
|
+
installer = WIN32OLE.new('WindowsInstaller.Installer')
|
|
46
|
+
installer.Products.each { |installed_product_code| return true if (product_code == installed_product_code) }
|
|
47
|
+
return false
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def self.product_name_installed_version(product_name)
|
|
51
|
+
installer = WIN32OLE.new('WindowsInstaller.Installer')
|
|
52
|
+
info = product_info(installer, product_code_from_product_name(product_name, installer))
|
|
53
|
+
return info['VersionString']
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
private
|
|
57
|
+
def self.product_code_from_msi(msi_file, installer = nil)
|
|
58
|
+
msi_info = msi_properties(msi_file)
|
|
59
|
+
return msi_info['ProductCode']
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def self.product_code_from_product_name(product_name, installer = nil)
|
|
63
|
+
installer = WIN32OLE.new('WindowsInstaller.Installer') if(installer.nil?)
|
|
64
|
+
installer.Products.each { |prod_code|
|
|
65
|
+
name = installer.ProductInfo(prod_code, "ProductName")
|
|
66
|
+
return prod_code if (product_name == name)
|
|
67
|
+
}
|
|
68
|
+
raise "Failed to find product code for product: #{product_name}"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def self.product_code_properties(product_code, installer = nil)
|
|
72
|
+
installer = WIN32OLE.new('WindowsInstaller.Installer') if(installer.nil?)
|
|
73
|
+
hash = Hash.new
|
|
74
|
+
# known product keywords found on internet. Would be nice to generate.
|
|
75
|
+
%w[Language PackageCode Transforms AssignmentType PackageName InstalledProductName VersionString RegCompany
|
|
76
|
+
RegOwner ProductID ProductIcon InstallLocation InstallSource InstallDate Publisher LocalPackage HelpLink
|
|
77
|
+
HelpTelephone URLInfoAbout URLUpdateInfo InstanceType].sort.each do |prop|
|
|
78
|
+
value = installer.ProductInfo(product_code, prop)
|
|
79
|
+
hash[prop] = value unless(value.nil? || value == '')
|
|
80
|
+
end
|
|
81
|
+
return hash
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def self.print_properties(product_name)
|
|
85
|
+
installer = WIN32OLE.new('WindowsInstaller.Installer')
|
|
86
|
+
properties = product_info(installer, product_code(product_name, installer))
|
|
87
|
+
properties.each { |id, value| puts "#{id}: #{value}" }
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def self.msi_records(msi_file)
|
|
91
|
+
records = {}
|
|
92
|
+
|
|
93
|
+
installer = WIN32OLE.new('WindowsInstaller.Installer')
|
|
94
|
+
sql_query = "SELECT * FROM `Property`"
|
|
95
|
+
|
|
96
|
+
db = installer.OpenDatabase(msi_file, 0)
|
|
97
|
+
|
|
98
|
+
view = db.OpenView(sql_query)
|
|
99
|
+
view.Execute(nil)
|
|
100
|
+
|
|
101
|
+
record = view.Fetch()
|
|
102
|
+
return '' if(record == nil)
|
|
103
|
+
|
|
104
|
+
while(!record.nil?)
|
|
105
|
+
records[record.StringData(1)] = record.StringData(2)
|
|
106
|
+
record = view.Fetch()
|
|
107
|
+
end
|
|
108
|
+
db.ole_free
|
|
109
|
+
db = nil
|
|
110
|
+
installer.ole_free
|
|
111
|
+
installer = nil
|
|
112
|
+
|
|
113
|
+
return records
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def self.print_msi_records(msi_file)
|
|
117
|
+
records = msi_records(msi_file)
|
|
118
|
+
|
|
119
|
+
puts "#{msi_file} Properties:"
|
|
120
|
+
records.each do |key,value|
|
|
121
|
+
puts "#{key}: #{value}"
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def self.print_product_name(product_name)
|
|
126
|
+
installer = WIN32OLE.new('WindowsInstaller.Installer')
|
|
127
|
+
# only one session per process!
|
|
128
|
+
session = installer.OpenProduct(product_code_from_product_name?(product_name, installer))
|
|
129
|
+
db = session.Database
|
|
130
|
+
|
|
131
|
+
sql_query = "SELECT * FROM `Property`"
|
|
132
|
+
view = db.OpenView(sql_query)
|
|
133
|
+
view.Execute(nil)
|
|
134
|
+
|
|
135
|
+
record = view.Fetch()
|
|
136
|
+
return '' if(record == nil)
|
|
137
|
+
|
|
138
|
+
puts "Session Properties:"
|
|
139
|
+
while(!record.nil?)
|
|
140
|
+
puts "#{record.StringData(1)}: #{record.StringData(2)}"
|
|
141
|
+
record = view.Fetch()
|
|
142
|
+
end
|
|
143
|
+
db.ole_free
|
|
144
|
+
db = nil
|
|
145
|
+
installer.ole_free
|
|
146
|
+
installer = nil
|
|
147
|
+
puts ''
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def self.execute(cmd)
|
|
151
|
+
command = Wixgem::Command.new(cmd)
|
|
152
|
+
command.execute
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
end
|
data/lib/command.rb
CHANGED
data/lib/wixgem.rb
CHANGED
|
@@ -230,6 +230,7 @@ class Wix
|
|
|
230
230
|
|
|
231
231
|
def self.execute_heat(input, cmd_line_options)
|
|
232
232
|
heat_cmd = Command.new("\"#{install_path}/bin/heat.exe\" #{modify_heat_commandline(input, cmd_line_options)}", { quiet: true })
|
|
233
|
+
heat_cmd[:debug] = true
|
|
233
234
|
heat_cmd.execute
|
|
234
235
|
log_wix_output(heat_cmd)
|
|
235
236
|
end
|
metadata
CHANGED
|
@@ -1,69 +1,69 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: wixgem
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.49.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: 2015-02-
|
|
11
|
+
date: 2015-02-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - ~>
|
|
17
|
+
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
19
|
version: '0'
|
|
20
20
|
type: :development
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- - ~>
|
|
24
|
+
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '0'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: rake
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- - ~>
|
|
31
|
+
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
33
|
version: '0'
|
|
34
34
|
type: :development
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- - ~>
|
|
38
|
+
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '0'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: rspec
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- - ~>
|
|
45
|
+
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
47
|
version: '0'
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
|
-
- - ~>
|
|
52
|
+
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '0'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: dev
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
|
-
- - ~>
|
|
59
|
+
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
61
|
version: '0'
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
|
-
- - ~>
|
|
66
|
+
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
68
|
version: '0'
|
|
69
69
|
description: Simple Ruby interface to facilitate creating and compiling windows installation
|
|
@@ -81,6 +81,7 @@ files:
|
|
|
81
81
|
- example/install_files/file1.txt
|
|
82
82
|
- example/rakefile.rb
|
|
83
83
|
- lib/WindowsInstaller.rb
|
|
84
|
+
- lib/WindowsInstaller_hold.rb
|
|
84
85
|
- lib/command.rb
|
|
85
86
|
- lib/wixgem.rb
|
|
86
87
|
homepage: http://rubygems.org/gems/wixgem
|
|
@@ -93,17 +94,17 @@ require_paths:
|
|
|
93
94
|
- lib
|
|
94
95
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
95
96
|
requirements:
|
|
96
|
-
- -
|
|
97
|
+
- - ">="
|
|
97
98
|
- !ruby/object:Gem::Version
|
|
98
99
|
version: 1.9.1
|
|
99
100
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
101
|
requirements:
|
|
101
|
-
- -
|
|
102
|
+
- - ">="
|
|
102
103
|
- !ruby/object:Gem::Version
|
|
103
104
|
version: '0'
|
|
104
105
|
requirements: []
|
|
105
106
|
rubyforge_project:
|
|
106
|
-
rubygems_version: 2.2.
|
|
107
|
+
rubygems_version: 2.2.2
|
|
107
108
|
signing_key:
|
|
108
109
|
specification_version: 4
|
|
109
110
|
summary: Simple Ruby interface to facilitate working with Wix Toolset
|