Message 71185 - Python tracker (original) (raw)

Martin, at the time I read the python-list thread, I didn't pay any attention to the posts' authors. Only now did I realize you were one of the posters. Oops.

I already know the basic ideas about creating MSIs with Wise from a past job. So now I researched and thought about this particular problem for several hours. I've learned that Windows Installer is able to add ...\python and ...\python\scripts to the PATH during installation. It cannot[1] remove them at uninstallation. [ WiX, and its superior competitor MAKEMSI, each provide slightly higher-level abstractions[2][3] on top of what Windows Installer provides[4] to make this slightly easier, but not by that much. But I will assume you don't plan to spend days or weeks of your spare time on migrating away from msilib. :-) ]

Here are the rough notes I've made up so far on how to do this:

Component:"modify_path_per_user" - Name:"=*PATH" Value:"[TARGETDIR];[TARGETDIR]\Scripts;[~]" Component:"modify_path_per_machine"

Another difficult part is the UI. Then there's the issue of switching which of the two components are installed based on whether it's per- user or per-machine and also based on whether the user specifies via the UI that they want their PATH changed. I have to think more about that, and I'm already tired of researching.

Remember that Windows Installer cannot undo its PATH changes at uninstall time. So, before I consider proceeding further, let me verify a few things with you.

  1. [TARGETDIR] will stay on the path. I think that is fine, since the python.exe will be gone, so will never be executed. Do you agree?

  2. [TARGETDIR]\scripts will also stay on the path. And it may still contain scripts installed by the user or by third-party installers like the SCons installer. I don't know enough about how Python works to know if that's a problem. Is it a problem?

P.S. Would you prefer to discuss this by something more synchronous like telephone (I will pay the tolls) or instant messaging?

P.P.S. Now that I have realized how complicated Python installation actually is, and how hard it is to design the tables of and write raw .MSI files, I have a new appreciation for the work you've done on making a Python MSI installer. Thank you very much for having done so. Also, now that I have started researching how much work is necessary to get this done, I realize why you don't want to code it yourself. :-)

I don't know if I will end up actually managing to come up with a patch.

^ [1]. I have inferred this fact based on http://www.isg.ee.ethz.ch/tools/realmen/det/msi.en.html -- scroll down to the "Setting the PATH" section ^ [2]. http://blogs.technet.com/alexshev/archive/2008/03/28/from-msi- to-wix-part-13-installable-items-environment-variable.aspx ^ [3]. http://makemsi-manual.dennisbareis.com/path.htm ^ [4]. http://msdn.microsoft.com/en-us/library/aa368369(printer).aspx ^ [5]. Search inside the page http://msdn.microsoft.com/en- us/library/aa368369(printer).aspx for "If the package can be installed per-user or per-machine" to see why you need two rows.