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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6cc49605457da97d26245c8d8d141bae95d2ea6f
4
- data.tar.gz: a486cfdb2dfe6f9e7434328ad11c0d587db481b9
3
+ metadata.gz: 061afe43dfa14c1ecd5d5b2a48babc203e36866e
4
+ data.tar.gz: 4e4593073b5edd42f7535603b5eef5a87cfb1cc3
5
5
  SHA512:
6
- metadata.gz: f64e9cb3bb1d1092914d3f701889df6cafed615b5aa12d9fed383e23ea0f7881f3574d7ee0c5f159f54614d54b3689d443287751ffcc62bf7bfea0b82e2e062a
7
- data.tar.gz: 243e5b1b0526550ba457c63b3228ed236bbde014dd33b0396cd979b57f167be81b090a13ee5df7187f82b20815d4f32058b66bbb411c345c57c8ed27dc0b957f
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
@@ -22,6 +22,7 @@ class Command < Hash
22
22
  self[:exit_code]=self[:exit_code].to_i
23
23
 
24
24
  if(self[:debug])
25
+ puts "command: #{self[:command]}" if(self[:quiet])
25
26
  puts "output: #{self[:output]}"
26
27
  puts "error: #{self[:error]}"
27
28
  puts "exit_code: #{self[:exit_code]}"
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.48.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-01 00:00:00.000000000 Z
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.0
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