From: Mark H. <mha...@sk...> - 2008-08-05 05:41:32
|
Hi all, I just struck a problem with Python 2.6 and py2exe, caused by py2exe stripping the "manifest" from the target executable. This lack of a manifest causes the Microsoft CRT to fail to initialize - it *must* have a manifest in the executable to load correctly (runtime error R6034 - see http://msdn.microsoft.com/en-us/library/ms235560.aspx ). So I set about fixing that. As this manifest info includes the 'requestedExecutionLevel' value which is important for Vista, I thought I'd also add the ability to modify that string on a per-target basis. This means py2exe created executables can be marked as, eg, 'requireAdministrator', so will get the little shield icon and automatically prompt for elevation without any action from the program. It also has an impact on virtualization applied by windows - see README.txt in the new sample for details. I've uploaded a patch at http://sourceforge.net/tracker/index.php?func=detail&aid=2038411&group_id=15 583&atid=315583, which I think it pretty complete. I thought I'd let it sit there for a week or so on the off-chance someone finds time to check it out and has any comments or ideas - but in the more likely chance that I hear nothing at all <wink>, I'll just check it in. Cheers, Mark |
From: Thomas H. <th...@ct...> - 2008-08-07 18:27:42
|
Mark Hammond schrieb: > Hi all, > I just struck a problem with Python 2.6 and py2exe, caused by py2exe > stripping the "manifest" from the target executable. This lack of a > manifest causes the Microsoft CRT to fail to initialize - it *must* have a > manifest in the executable to load correctly (runtime error R6034 - see > http://msdn.microsoft.com/en-us/library/ms235560.aspx ). So I set about > fixing that. > > As this manifest info includes the 'requestedExecutionLevel' value which is > important for Vista, I thought I'd also add the ability to modify that > string on a per-target basis. This means py2exe created executables can be > marked as, eg, 'requireAdministrator', so will get the little shield icon > and automatically prompt for elevation without any action from the program. > It also has an impact on virtualization applied by windows - see README.txt > in the new sample for details. > > I've uploaded a patch at > http://sourceforge.net/tracker/index.php?func=detail&aid=2038411&group_id=15 > 583&atid=315583, which I think it pretty complete. I thought I'd let it sit > there for a week or so on the off-chance someone finds time to check it out > and has any comments or ideas - but in the more likely chance that I hear > nothing at all <wink>, I'll just check it in. Mark, I'm sure you are doing exactly what is needed, and I'm happy that py2exe will be ready for Vista and/or Python 2.6 when I will need it in the future ;-). I have only one question from reading your patch: self.announce("Resolving binary dependencies:") + excludes_use = dll_excludes[:] + # The MSVCRT modules are never found when using VS2008+ + if sys.version_info > (2,6): + excludes_use.append("msvcr90.dll") Does py2exe's binary dependency search not find msvcr90.dll? Do you know why? -- Thanks, Thomas |
From: Mark H. <mha...@sk...> - 2008-08-07 22:32:28
|
Hi Thomas, > I have only one question from reading your patch: > > self.announce("Resolving binary dependencies:") > + excludes_use = dll_excludes[:] > + # The MSVCRT modules are never found when using VS2008+ > + if sys.version_info > (2,6): > + excludes_use.append("msvcr90.dll") > > > Does py2exe's binary dependency search not find msvcr90.dll? Do you > know why? The DLL is installed via an assembly - either in the GAC or a private assembly. Thus, that DLL literally does not exist anywhere on PATH (it *may* be found next to one of the other DLLs, but that would be by "chance"). As I implied in that patch, even if it *was* found on the path, attempting to load it without doing so via an assembly ends up with a runtime error anyway. Cheers, Mark |