Re: [cx-freeze-users] Two questions about cx-freeze
Brought to you by:
atuining
From: John J. <joh...@po...> - 2005-09-12 18:41:23
|
On Sep 12, 2005, at 7:34 AM, Anthony Tuininga wrote: >> 2. I tried modifying the base executable to add Windows XP theme and >> version info, and ended up with an executable that was very small (10 >> KB) and one that Windows said was not a program. >> >> I used some code from py2exe: >> >> from py2exe.py2exe_util import add_resource >> exe_path = os.path.join(CWD, PROG_DIST_DIR, target) >> >> data = MANIFEST_TEMPLATE % dict(prog=constants.PROGRAM_NAME, >> file_description=constants.PROGRAM_TITLE) >> res_type = RT_MANIFEST >> if isinstance(res_type, str): >> res_type = unicode(res_type) >> result = add_resource(unicode(exe_path), data, res_type, 1, >> False) >> print "Inserted manifest for %s: %s" % (target, result) >> >> I tried doing this on a version of a base executable before calling >> FreezePython, but that made no difference. >> > > Hmm, that should work. You should do the following: > > copy the base executable (for this pseudocode assume the name > "copied.exe") > modify "copied.exe" to include the version/manifest information > use FreezePython with --base-name=copied.exe > > I haven't done this with version/manifest stuff but I have done it > successfully with icons so this technique definitely works. Its not > ideal so I also have plans to provide for this mechanism in a much > more integrated fashion. That was what I had tried: I copied the base executable to a build directory, modified it there, and then used --base-name: executableBasePath = os.path.join(BUILD_DIR_PATH, executableBase) shutil.copy2(os.path.join(CWD, CX_FREEZE_BASES, executableBase), executableBasePath) InsertManifestAndVersion(executableBasePath) cmd = '%s --install-dir=%s --target-name=%s --base-name="%s" %s' % (CX_FREEZE, distDirectoryPath, target, executableBasePath, MAIN) print "Now executing...\n %s" % cmd cmdStndIn, cmdStndOut = os.popen4(cmd) for line in cmdStndOut: print line, What I notice is that if I double click on one of the original bases, it is recognized as an executable, though an error message is returned as it is not a complete executable: zipimport.ZipImportError: not a Zip file: 'C:\Documents and Settings\My Documents\cx_Freeze-3.0.1\bases\Console.exe' Fatal Python error: cannot get zipimporter instance This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information. However, once I insert the manifest information -- even before running it through cx_freeze, windows won't recognize it , saying it's an invalid win32 application. So, my code for doing the insert of the manifest is causing the problem. Can you tell me what code you used to insert an icon? Perhaps I can modify that to handle the manifest... Also, is there any difference between "--base-binary" and "--base- name"? Are they identical? It looks like it from reading the code... ______________ John Jackson |