wixgem 0.48.0 → 0.49.0

Sign up to get free protection for your applications and to get access to all the features.
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