# System() with .msi files on WinXP

**URL:** <https://www.ruby-forum.com/t/system-with-msi-files-on-winxp/93590>\
**Category:** Ruby\
**Created:** [April 5, 2006, 12:00am UTC](https://www.ruby-forum.com/t/system-with-msi-files-on-winxp/93590 "2006-04-05T00:00:46Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![brad7a0](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/53a042/32.png) [@brad7a0](https://www.ruby-forum.com/u/brad7a0)\
**Post date:** [April 5, 2006, 12:00am UTC](https://www.ruby-forum.com/t/system-with-msi-files-on-winxp/93590/1 "2006-04-05T00:00:46Z")

</div>

I have a ruby script that installs several windows applications like  
this:

programs.each { |p| system§ }

This works great with .exe installers, but if the program is a .msi  
installer, nothing happens and ruby exits with 0.

With Python, os.system(installer.msi) works great. Perhaps in Ruby I  
should do this differently? Any suggestions?

Thanks,  
Brad

---

<div class="post-metadata">

**Author:** ![brad7a0](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/53a042/32.png) [@brad7a0](https://www.ruby-forum.com/u/brad7a0)\
**Post date:** [April 5, 2006, 12:09am UTC](https://www.ruby-forum.com/t/system-with-msi-files-on-winxp/93590/2 "2006-04-05T00:09:55Z")

</div>

rtilley wrote:

> Thanks,  
> Brad

What about

system “start #{p}”

just a guess…

---

<div class="post-metadata">

**Author:** ![brad7a0](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/53a042/32.png) [@brad7a0](https://www.ruby-forum.com/u/brad7a0)\
**Post date:** [April 5, 2006, 1:24am UTC](https://www.ruby-forum.com/t/system-with-msi-files-on-winxp/93590/3 "2006-04-05T01:24:31Z")

</div>

Joel VanderWerf wrote:

> rtilley wrote:
> 
> > Thanks,  
> > Brad
> 
> What about
> 
> system “start #{p}”
> 
> just a guess…

msiexec /? and see MSDN

Use “msiexec”

Make sure you pass the right switches for a silent install.

---

<div class="post-metadata">

**Author:** ![brad7a0](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/53a042/32.png) [@brad7a0](https://www.ruby-forum.com/u/brad7a0)\
**Post date:** [April 5, 2006, 2:36am UTC](https://www.ruby-forum.com/t/system-with-msi-files-on-winxp/93590/4 "2006-04-05T02:36:02Z")

</div>

> end
> 
> system on windows is problematic! I think this is more of a  
> windows issue than a ruby issue as I have the same problem  
> with python and ruby when working with system.

Try working backwards - install the .msi manually using msiexec.exe  
 file.msi at the command line. Once you know it works, create  
a  
script that just calls system(‘what\_worked\_above’).

Does that work?

Then, once you know what works with MSI, build that into the script. If  
it  
doesn’t work with the one-line system() script, then I’m not sure what  
to  
suggest.

-M

---

<div class="post-metadata">

**Author:** ![brad7a0](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/53a042/32.png) [@brad7a0](https://www.ruby-forum.com/u/brad7a0)\
**Post date:** [April 5, 2006, 2:54am UTC](https://www.ruby-forum.com/t/system-with-msi-files-on-winxp/93590/5 "2006-04-05T02:54:21Z")

</div>

Mike wrote:

> > end  
> > Does that work?  
> > Sort of…

‘msiexec -i installer.msi’ from a cmd prompt translates to this in Ruby:

# Works in Ruby:

system(‘msiexec -i installer.msi’)

This works fine. But string interpolation does not work, and it should,  
right?

# Fails in Ruby:

system(‘msiexec -i #{File.basename(wup)}’)

---

<div class="post-metadata">

**Author:** ![brad7a0](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/53a042/32.png) [@brad7a0](https://www.ruby-forum.com/u/brad7a0)\
**Post date:** [April 5, 2006, 3:12am UTC](https://www.ruby-forum.com/t/system-with-msi-files-on-winxp/93590/6 "2006-04-05T03:12:32Z")

</div>

rtilley wrote:

> # Fails in Ruby:
> 
> system(‘msiexec -i #{File.basename(wup)}’)

Interpolation only happens in double quotes. Try:

system(“msiexec -i #{File.basename(wup)}”)

---

<div class="post-metadata">

**Author:** ![brad7a0](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/53a042/32.png) [@brad7a0](https://www.ruby-forum.com/u/brad7a0)\
**Post date:** [April 5, 2006, 2:30am UTC](https://www.ruby-forum.com/t/system-with-msi-files-on-winxp/93590/7 "2006-04-05T02:30:00Z")

</div>

Miles Monroe wrote:

> > just a guess…
> 
> msiexec /? and see MSDN

I’ve tried that and start… still no go. Here’s the code:

def install\_programs(program\_list)  
#program\_list is a list of absolute paths.  
program\_list.each do |wup|  
Dir.chdir(File.dirname(wup))  
puts Dir.getwd  
puts(File.basename(wup))  
system(‘msiexec -i #{File.basename(wup)}’)  
end  
end

system on windows is problematic! I think this is more of a windows  
issue than a ruby issue as I have the same problem with python and ruby  
when working with system.
