Register Custom URL Protocol handler
In the following example we're going to create a simple url protocol (like mailto/http etc) handler, e.g.
First of all we need to create some registry entries in order to register our custom protocol, we can do this programatically like this:
RegistryKey Key = Registry.ClassesRoot.CreateSubKey("test"); Key.CreateSubKey("DefaultIcon").SetValue("", "test.exe,1"); Key.SetValue("", "test:Protocol"); Key.SetValue("URL Protocol", ""); Key.CreateSubKey(@"shell\open\command").SetValue("", "test.exe %1");
Next we're going to create a very simple console application (test.exe) handling our request, we pass values to the handler via command line - in this case the hyperlink passing the command line.
using System; using System.Collections.Generic; using System.Text; class Program { static void Main(string[] args) { foreach (string s in args) { Console.WriteLine(s); } Console.ReadKey(); } }
Once we click on the test:123 hyperlink in the first snippet, you will notice a console application popping up - displaying the values passed to the protocol.
Note that browsers encode passed values differently, so make sure that you've tested your handler in multiple browsers.
Posted by - Christoff Truter
Date - 2010-06-28 20:34:01
Comments - 0
Date - 2010-06-28 20:34:01
Comments - 0
C#: Expose internal members to outside assemblies
Normally when members (properties/methods/delegates/indexers etc) are defined as internal, they're only available within the assembly they reside in.
internal class b { public void c() { Console.WriteLine("Internal"); } }
But since .net 2.0 its possible to expose internal members to assemblies outside the residing assembly using the InternalsVisibleTo attribute.
Within the assembly that we wish to expose internal members, you will need to register the names of the assembly(ies) that require access to the internals like this:
[assembly: InternalsVisibleTo("someassembly")] [assembly: InternalsVisibleTo("someotherassembly")]
It is also possible (and advisable) to sign the assemblies with a strong key to make it difficult for a malicious user to spoof (replace/inject) code into your assembly.
To create/assign a strong key within visual studio:
- right click on your project
- select properties
- click on the signing tab
- tick sign the assembly
- select new(or browse for an exiting key)
rem extract public key sn -p keyPair.snk publicKey.snk rem display public key sn -tp publicKey.snk
Next add the public key to the assembly exposing internal members:
[assembly: InternalsVisibleTo("somesignedassembly, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b12297f91269c8957718971524fc11c1eb8d62bba5b04b82149ca45f4567a6f6f12a76db30fd3a63f89066137b331e48b8e8ff9753720ca1acf4e0910edd606654c8db9b2d5cd5ca08fc4fe7c2fe3d8bcc9debdb292cd0dedfe0737170a539065df87b77a52376b2588e8a1d12a91650aaf0db0204e875b4f40821c714b8e3a6")]
Note: In order to use a signed assembly, both the target and source assemblies need to be signed, in order to use an unsigned assembly, both target and source assemblies need to be unsigned.
Some sources:
Strong Name Tool (Sn.exe)
InternalsVisibleToAttribute Class
Posted by - Christoff Truter
Date - 2010-06-19 00:12:56
Comments - 0
Date - 2010-06-19 00:12:56
Comments - 0
First 21 22 23 24 25 26 27 28 29 30 Last / 62 Pages (124 Entries)