Jump to content
  • 1

RA2 portable: making blowfish.dll registration-free


LFZombie
 Share

Question

I'm trying to create a portable version of RA2, so I want to eliminate the registration for Blowfish.dll. I found a link from @Iran where @FunkyFr3sh described a method here:

https://ppmforums.com/topic-41629/using-blowfishdll-without-registration-no-admin-rights/

But the example there is dead, and I can't seem to produce a manifest that works. MT.exe gave me this:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
	<file name="blowfish.dll" hashalg="SHA1">
		<comClass clsid="{1440AD10-6AA8-11D1-B6F9-00A024DDAFD1}" tlbid="{E7F91750-8861-11D1-B707-00A024DDAFD1}" description="Blowfish encryption algorithm"></comClass>
		<typelib tlbid="{E7F91750-8861-11D1-B707-00A024DDAFD1}" version="1.0" helpdir="" flags="HASDISKIMAGE"></typelib>
	</file>
	<comInterfaceExternalProxyStub name="IBlockCipher" iid="{E0113100-6A7C-11D1-B6F9-00A024DDAFD1}" tlbid="{E7F91750-8861-11D1-B707-00A024DDAFD1}" proxyStubClsid32="{E0113100-6A7C-11D1-B6F9-00A024DDAFD1}">
	</comInterfaceExternalProxyStub>
</assembly>

But it does nothing. I'd be grateful for any help.

  • Upvote 1
Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Alright, I've made it work now. What a nightmare. I'll document my findings here for future reference.

- External manifest files are cached in a hidden, unflushable cache. If you update a manifest, Windows will silently ignore all changes and use the old version instead. The only reliable way to actually make it read the new manifest is to change the modified date property on the application exe.

- Some blowfish.dlls have an embedded manifest that overrides the external, some don't.

- Using the same name for the assemblyIdentity and the DLL can cause conflicts.

In the end, I used the blowfish.dll with manifest from the ts-patches git dkeeton linked (filesize 160768), and these two manifests in the RA2 folder:

game.exe.manifest:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

<assemblyIdentity
  type="win32"
  name="client.exe"
  version="1.0.0.0" />
  <dependency>
          <dependentAssembly>
              <assemblyIdentity
                  type="win32"
                  name="blowfish.sxs"
                  version="1.0.0.0" />
          </dependentAssembly>
  </dependency>
</assembly>

blowfish.sxs.manifest:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

<assemblyIdentity
    type="win32"
    name="blowfish.sxs"
    version="1.0.0.0" />

<file xmlns="urn:schemas-microsoft-com:asm.v1" name="BLOWFISH.DLL" hashalg="SHA1">
		<typelib tlbid="{E7F91750-8861-11D1-B707-00A024DDAFD1}" version="1.0" helpdir="" flags="HASDISKIMAGE"></typelib>
		<comClass clsid="{1440AD10-6AA8-11D1-B6F9-00A024DDAFD1}" tlbid="{E7F91750-8861-11D1-B707-00A024DDAFD1}" description="Blowfish encryption algorithm"></comClass>
</file>
<comInterfaceExternalProxyStub name="IBlockCipher" iid="{E0113100-6A7C-11D1-B6F9-00A024DDAFD1}" tlbid="{E7F91750-8861-11D1-B707-00A024DDAFD1}" proxyStubClsid32="{E0113100-6A7C-11D1-B6F9-00A024DDAFD1}"></comInterfaceExternalProxyStub>
</assembly>

Some of that might or might not be redundant, but at least it works now without Administrator rights and COM registration.

  • Upvote 1
Link to comment
Share on other sites

 Share

×
×
  • Create New...