Hi All,
I'm trying to capture an application called JT2Go using ThinApp 4.6. I have it working on XP, but get an error on 7 (64-bit). The issue is with Win SxS. Right now I have LoadDotNetFromSystem=Win7 enabled (though it's not a .Net app, so I don't think it's doing anything one way or the other). I ran it through SxStrace on the Win7 machine and ther error is pretty obvious.
Here it is:
INFO: Parsing Manifest File C:\Users\userprofile\AppData\Roaming\Thinstall\JT2Go\SKEL\4692-41.manifest.
INFO: Manifest Definition Identity is Visview.exe,processorArchitecture="x86",type="win32",version="8.1.0.0".
INFO: Reference: ..\\..\\Program\\ProgramManifest,type="win32",version="1.0.0.0"
INFO: Resolving reference ..\\..\\Program\\ProgramManifest,type="win32",version="1.0.0.0".
INFO: Resolving reference for ProcessorArchitecture ..\\..\\Program\\ProgramManifest,type="win32",version="1.0.0.0".
INFO: Resolving reference for culture Neutral.
INFO: Applying Binding Policy.
INFO: No binding policy redirect found.
INFO: Begin assembly probing.
INFO: Did not find the assembly in WinSxS.
INFO: Attempt to probe manifest at C:\Users\userprofile\AppData\Roaming\Thinstall\JT2Go\SKEL\..
..
Program
ProgramManifest.DLL.
INFO: Attempt to probe manifest at C:\Users\userprofile\AppData\Roaming\Thinstall\JT2Go\SKEL\..
..
Program
ProgramManifest.MANIFEST.
INFO: Attempt to probe manifest at C:\Users\userprofile\AppData\Roaming\Thinstall\JT2Go\SKEL\..
..
Program
ProgramManifest\..
..
Program
ProgramManifest.DLL.
INFO: Attempt to probe manifest at C:\Users\userprofile\AppData\Roaming\Thinstall\JT2Go\SKEL\..
..
Program
ProgramManifest\..
..
Program
ProgramManifest.MANIFEST.
INFO: Did not find manifest for culture Neutral.
INFO: End assembly probing.
ERROR: Cannot resolve reference ..\\..\\Program\\ProgramManifest,type="win32",version="1.0.0.0".
ERROR: Activation Context generation failed.
End Activation Context Generation
Any ideas? Not sure what the heck " ..\\..\\Program\\" is.
I captured on an absolutely clean VM and did allow it to capture the VC++ 2005 runtime. I've also confirmed that the VC++ 2005 (x86) runtime is physically installed on the Win7 box.
The forum software here actually gave me a clue. Looking at the manifest file the error references it's clear the at some point in execution the '\' (backslash) character is being inturpretted as '& # x 5 c ;' (no single quotes or spaces, I just don't want the forum software to convert the character code). So I'm pretty sure that explains the error, though I still have no idea on how to correct it.
Thanks for finding one more ThinApp bug for me
I can share other occasions in all TXT-registry files and Package.ini of the project:
1. 00a1 (or other HEX numbers) instead of normal symbol %. Example: %ProgramFilesDir0023 instead of %ProgramFilesDir%
2. \? instead of \
I've found hundreds of such incomings when packaging MS Office.
I'm sure it is not all variants of wrong records.
Example: %ProgramFilesDir~0023 instead of %ProgramFilesDir%
That's not a bug, it's a feature :-). It's an indication that the original registry entry stored a short path name. We store it as a long path name in the virtual registry, with this ~00xx notation. When the app queries the registry value, we'll return it in short path format again. The 00xx (0023 in your example) indicates the (hex) number of characters following the macro that need to be returned as short path.
Example: original value was
C:\PROGRA1\LONGPA1\Long File.txt
gets converted to
%ProgramFilesDir~000a\Long Path\Long File.txt
when stored in the registry.
Thanks for answer!
What about
\? instead of \
like
%ProgramFilesDir%\?_somePath\
You should only see this as e.g. %?ProgramFilesDir%\SomePath, in which case it means the original registry value contained a '?' instead of a ':' in the drive specification, e.g.
C?\Program Files\SomePath
Windows Installer creates registry entries like this.
So should I fix it into "c:" ?
No need, the ThinApp runtime will automatically convert it back when the app requests the registry value.
Thank you for all these answers.
So I understand the long path to short path conversion and vice versa, however I don't think that's the issue I'm seeing with this app. I've searched all of the txt based registry files for "ProgramManifest" and come up with nothing. I've also searched for ~005c, again nothing. Should I try modifying the manifest file and replacing the actual backslashes with '& # x 5 c ;'? Or would it be ~005c instead?
Thanks
Tried all of that, is this issue a bug? (the manifest issue, not the long/short path conversion)
So here's what I know. The manifest for the applications main EXE is trying to direct the SxS subsystem to back up two directories in the applications tree and then follow a different path in to the applications DLLs. On a physical machine the assemblyIdentifty name variable of the main EXE's manifiest directs the SxS subsystem to do so like this:
name="..\..\Program\ProgramManifest"
and it works. Under ThinApp the ..\..\ directive is being ignored and instead of marching to directory levels up the directory tree SxS is mearly appending ..\..\XXXXXX to the probing path and obviously not finding the DLLs there as that path doesn't exist.
I've been banging away at this for days and as far as I can tell this is a bug. Any comment from any staffers? I'm happy I have identified the issue, but at this point I'm clueless as to how to fix it.