4
votes

I have a VB6 application that needs to be installed on Windows Vista as a Standard User. Using Visual Studio 2005 I have created a setup project that will place the application in a standard user safe place or folder. I also have a dll that I want to install and register to the users application data folder. Once my windows installer is created in VS'05 I flipped the word count properties' 3rd bit using msiinfo.exe so that Vista will not prompt Admin credentials when it runs the msi. The application installs without any problems until it tries to register the dll to the users application data folder. When it reaches that point it throws an error stating that it cannot register the type library for the dll. It appears the installer does not have the authority to register a dll to the users folder. Is this correct? My understanding was that Vista only complained about standard users updating or changing items that affected all users of a machine. Any ideas? Thoughts? Suggestions?

6
I've taken the liberty of tagging this "regfreecom" because I think that's going to be the correct answer to the problem. I realise it may be a little early as Steven hasn't tried it out yet...MarkJ
@MarkJ: I think you should not go around tagging questions with what you think will be the correct answer. This is not what tags are for, this is what answers are for. It seems that Reg-free COM works for COM references in .NET assemblies only.Tomalak
@Tomalak. Thanks for feedback. In fact reg-free COM also works with COM references used from VB6 clients, for instance the MakeMyManifest tool only works for VB6 clients. Or read the article referred to in my answer.MarkJ
You can also package an MMM package as a per-user MSI (WordCount bit flipped) in order to create a Start Menu shortcut, etc.Bob

6 Answers

4
votes

Instead of registering your DLL files directly, you can use RegFree COM.

This involves creating an XML manifest file for your app, so Windows will look for your DLL files in the application folder, instead of using the system registry to find them.

This means your app will run properly without your installer having to register DLLs.

These links have more info:

http://msdn.microsoft.com/en-us/magazine/cc188708.aspx

http://www.devx.com/vb/Article/32888/1954

You can use the free Make My Manifest software to create the manifest files you need:

http://mmm4vb6.atom5.com/

4
votes

Steve

My suggestion is, if you are able, to use regfree com / manifest files instead of registering the ocx/dll files, which as you mention is a real chore under a basic user account.

There is an excellent free app you can use to build the manifest for you as well here: http://mmm4vb6.atom5.com/

We have been using this for a few years now, with no issues.

EDIT The MMM website is down. I see here that the author was having trouble with their hosting and has provided another location to get Make My Manifest - download it here.

1
votes

Generally I agree to what Joel Coehoorn says in his answer.

However, knowing how the registry works in this regard, I can make the suggestion that you try to manually register your DLL to HKEY_CURRENT_USER\SOFTWARE\Classes, basically repeating what regsvr32.exe would do to HKEY_LOCAL_MACHINE\SOFTWARE\Classes.

It's a bit of a hack, and maybe it won't work, but you can try it.

0
votes

Unattended Make My Manifest is a remake of MMM that can be used to generate manifests in automated builds. It uses a script file to add depended COM components.

0
votes
  • Registry-free COM: MakeMyManifest is well spoken of. It is an automatic tool for creating manifests for VB6 projects: I haven't tried it myself.
  • DirectCOM is an alternative to registry-free COM. It also has fans, again I haven't tried it.

EDIT The MMM website is down. I see here that the author was having trouble with their hosting and has provided another location to get Make My Manifest - download it here.

There is a semi-automatic technique for creating manifests for registry-free COM. You can create the manifests with Visual Studio 2008 (you can use a free version like Visual Basic Express Edition). Then make a couple of edits by hand to make the manifests suitable for use from VB6. See this section of this MSDN article for step-by-step instructions - ignore the rest of the article which is about ClickOnce.

-1
votes

Registering a DLL does impact all users (DLLs are registered globally) and therefore requires Admin permissions. There is no way around that.

The solution for newer programming environments is that the DLL doesn't need to be registered to be used. However, since vb6 relies on COM you're probably out of luck.