Showing posts with label App-V. Show all posts
Showing posts with label App-V. Show all posts

Wednesday, November 18, 2015

x64, Dynamic Link Libraries and confusion.

Still ranting about AppV.  So all three readers plus the mysterious bot from russia that reads this, get ready for more.

Everybody knows what a dynamic link library is don't they?  They were originally designed in the good old day when memory was expensive and mutlitasking was cool.  Now Multitasking is old hat and memory is cheap, dlls are kept around because their content is useful.  They are a useful container to pile in libraries of compiled code and a whole bunch of resources your program might use.

This works great provided there is no incompatibilities between this dll and that one.  And of course, for a variety of good reasons (and some really bad ones)  this doesn't happen.  This means that although you may have a library of the same name, with the same public hooks, and a later version, you may end up with different results.  Bad.  So how do we sort this out?

In comes the .local file.  Create an empty file called blah.exe.local in a given directory and it will use the dlls it finds in the same directory as the executable first.  Then it will hunt through the system.

Other cool things you can do is create a directory called blah.exe.local and pile the dlls in there.  This has the benefit of differentiating two executables in the same directory.

So, wasn't AppV going to deliver us from dll hell by sandboxing everything?  It tried.  But fortunately this trick works inside an AppV sandbox as well.  Hooray.

And what are other solutions?

Unix as a general rule includes the version number in the file name for libraries.  This means the executable will only associate with an appropriate version.  You can have as many versions as you like in a shared directory and everyone gets what they need.

Problem solved.  The problem is solved.  We solved the problem so everything is awesome.  Problem solved...

But wait.  There's more.

Along comes x64 libraries designed to run x 64 code on x 64 chips which is back compatible with x86 (or 32 bit) code.  This might mean that there are now 4 locations that the dll might be.


  • The current working directory
  • C:\windows\System
  • C:\windows\System32
  • C:\windows\SysWOW64
Where should they go?  Just to be confusing, x86 legacy code can try to look for dlls in System32 despite the fact that this is the directory for x64 dlls.  They should use SysWOW64 as their first location to look.  They don't.  

So use your .local files wisely people as this will make life happier.  Otherwise, inside your AppV sandbox, scatter your dlls everywhere.  It is messy, but it works.  And odds are nobody will look inside to complain about it.

Tuesday, November 17, 2015

Batch me up a shortcut.

Today's frustration comes in two parts.  Expect my thoughts on x64 implementations shortly.  But first, over the last week, I have been trying to shoehorn a legacy app into an AppV package.  This thing is so ancient, it's trying to install, not to some handy directory like "C:\Program Files\BLAH" but directly to C:\

No directory.  No.  Just going to scatter my own directories directly to the root.  So it comes as no surprise that this application does log management and launching via batch files.

Don't get me wrong.  A batch file can be a beautiful thing.  When the task is simple and within the scope of a batch file, which is considerably limited.  But these days, there are many choices for scripting.  JavaScript, vbScript, Powershell script, or if you want to go old school, there is always bash (ask your father)  All of these scripting languages have hooks into all sorts of handy functions in the OS.  You can (not that you should) build just about anything with them.

So the good  old .bat gets thrown on the temporal scrap heap.  Until I have to get this thing running on WindowsRecentx64.

This is where I learned that when using AppV, you have to explicitly name what program the .bat file should run under in a shortcut.  This means changing the target from

C:\BLAH\go.bat -fconfig /appvve:AGUID-WITH-A-BUNCHOFHEX_ANOTHER-GUID-WITH-MOREHEX

to

cmd.exe /C"C:\BLAH\go.bat -fconfig" /appvve:AGUID-WITH-A-BUNCHOFHEX_ANOTHER-GUID-WITH-MOREHEX

The same goes with .vbs and .js scripts, exept the engine changes to cscript or wscript if you like an abundance of pop ups.

Expect more ranting once I've finished documenting this legacy BLAH.

Friday, October 23, 2015

Asking for .hlp

The package I am currently working on has a .hlp file that needs opening so people can, well, get help.  Now because the .hlp standard is flawed with some insecurities that would allow people to redirect around security to get at stuff, Microsoft decided to only include the executable to read these as an optional extra.

In a .msu file

That only runs when the Windows Update service is running

That service you switch off so you can get a vanilla box to package on

Great...

You can switch it on and off. at will, and it seems to work for sliding it into the App-V bubble.  Hooray.

Turn's out this doesn't work.  Will keep this post updated as I look for answers.

Update:
I figured it out.  It's a bit of a pa-lava but it's definitely possible to bubble this bad boy.

Grab the .msu from the link. then pop it open using the cmd command

expand F:* windows6.1-KB917607-x86.msu C:\Temp\winhlp32

Now you fire up AppV sequencer and follow the steps below in your bubble

This will grab you a whole directory of joy.   Now you are going to have to do some ownership grabbing of the following files.  If you need help, click here.

  • C:\Windows\winhlp32.exe
  • C:\Windows\System32\ftsrch.dll
  • C:\Windows\EN-US\winhlp32.exe.mui
  • C:\Windows\EN-US\ftsrch.dll.mui

Copy the files below over their counterparts above.


  • C:\Temp\winhlp32\x86_microsoft-windows-winhstb.resources_31bf3856ad364e35_50.1.7600.16386_none_da3d517bf9765116\winhlp32.exe
  • C:\Temp\winhlp32\x86_microsoft-windows-winhstb.resources_31bf3856ad364e35_50.1.7600.16386_none_da3d517bf9765116\ftsrch.dll
  • C:\Temp\winhlp32\x86_microsoft-windows-winhstb.resources_31bf3856ad364e35_50.1.7600.16386_en-us_83921ac31ded8ee9\winhlp32.exe.mui



  • C:\Temp\winhlp32\x86_microsoft-windows-winhstb.resources_31bf3856ad364e35_50.1.7600.16386_en-us_83921ac31ded8ee9\ftsrch.dll.mui
And... now you have help in a bubble.  Standard cleanups apply.

Tuesday, October 20, 2015

App-V stole my shortcuts!

Being quite new to the App-V packaging world, I ran into an issue that I figured I'd share so others can

  1. Laugh at how silly I am, and
  2. Help out others in the same predicament
I was packaging up an application using Microsoft Application Virtualization Sequencer and all was good.  All the pieces from the MSI I was using were dropping into the correct place.  "Happy" thought I.  "I shall have this package ready for testing by luncheon today"

I install it onto a clean machine, and all is right with the world.  So I publish via the publisher.

I get the advertised icons on my start menu.  But do they do anything?  Nooooooo.  Badness.

I spend a while Google problem, try random fix, hope.

Anyways what I had not done was edited the package in the sequencer, gone into the Advanced Tab and ticked the boxes
  • Allow all named objects to interact with the local system
  • Allow all COM objects to interact with the local system
  • Allow virtual applications full write permissions to the virtual file system
Save, Publish and Happiness.

App-V versus error 142

For the last month or so I have been working with App-V and have had a series of issues that no one on the web seems to want to talk about. First of all,

Error 0x00000142 

Conventional wisdom says

But I have found at least one case where the above error is caused by Empty directories.  Fortunately this is easy to fix by placing a dummy file in the empty directory in the bubble.  Remind me to report this to the good people at Microsoft for some cool merch.

Update:

I have been randomly deleting files from the Package\Root\VFS directory since this seems to be the main culprit.  Basically, if it's empty, it can go.  Also, anything with the extension .msi can be deleted on principal.

Anything else in the Package\Root directory should probably use dummy folders.

As I learn more I'll keep all 3 of you posted.