VMware Horizon Community
bobbovine
Contributor
Contributor

Troubleshooting Win SxS errors, please help

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\&#x5c" 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.

Reply
0 Kudos
11 Replies
bobbovine
Contributor
Contributor

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.

Reply
0 Kudos
NickOn
Enthusiast
Enthusiast

Thanks for finding one more ThinApp bug for me Smiley Happy

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.

Reply
0 Kudos
admin
Immortal
Immortal

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.

Reply
0 Kudos
NickOn
Enthusiast
Enthusiast

Thanks for answer!

What about

\? instead of \

like

%ProgramFilesDir%\?_somePath\

Reply
0 Kudos
admin
Immortal
Immortal

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.

Reply
0 Kudos
NickOn
Enthusiast
Enthusiast

So should I fix it into "c:" ?

Reply
0 Kudos
admin
Immortal
Immortal

No need, the ThinApp runtime will automatically convert it back when the app requests the registry value.

Reply
0 Kudos
NickOn
Enthusiast
Enthusiast

Thank you for all these answers.

Reply
0 Kudos
bobbovine
Contributor
Contributor

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

Reply
0 Kudos
bobbovine
Contributor
Contributor

Tried all of that, is this issue a bug? (the manifest issue, not the long/short path conversion)

Reply
0 Kudos
bobbovine
Contributor
Contributor

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.

Reply
0 Kudos