Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- open System
- open System.IO
- open Microsoft.Win32
- type Key = string * list<(string * string)>
- type Keys = Key * list<Key>
- let name = "\0"
- let dir = "\1"
- let key1 = (@"Software\Classes\AppID\7D0E6AAB-C5FC-4103-AAD4-8BF3112A56C4", [ (null, "PartCoverCorDriver") ] )
- let key2 = (@"Software\Classes\AppID\PartCoverCorDriver.DLL", [ ("AppId", "7d0e6aab-c5fc-4103-aad4-8bf3112a56c4") ] )
- let key3 = (@"Software\Classes\CLSID\{717FF691-2ADF-4AC0-985F-1DD3C42FDF90}",
- [ (null, "CorProfiler Object") ; ("AppId", "7d0e6aab-c5fc-4103-aad4-8bf3112a56c4")] )
- let key3a = ("InprocServer32", [(null, name); ("ThreadingModel", "Both")])
- let key3b = ("ProgID", [(null, "PartCover.CorDriver.CorProfiler.4")])
- let key3c = ("Programmable", [])
- let key3d = ("TypeLib", [(null, "{7D0E6AAB-C5FC-4103-AAD4-8BF3112A56C4}")])
- let key3e = ("VersionIndependentProgID", [(null, "PartCover.CorDriver.CorProfiler")])
- let key4 = (@"Software\Classes\CLSID\{FB20430E-CDC9-45D7-8453-272268002E08}", [(null, "PartCoverConnector2 Object"); ("AppId", "7d0e6aab-c5fc-4103-aad4-8bf3112a56c4")])
- let key4a = ("InprocServer32", [(null, name); ("ThreadingModel", "Both")])
- let key4b = ("ProgID", [(null, "PartCover.CorDriver.Connector.3")])
- let key4c = ("Programmable", [])
- let key4d = ("TypeLib", [null, "{7D0E6AAB-C5FC-4103-AAD4-8BF3112A56C4}"] )
- let key4e = ("VersionIndependentProgID", [(null, "PartCover.CorDriver.Connector")])
- let key5 = (@"Software\Classes\PartCover.CorDriver.Connector", [(null, "PartCoverConnector2 Object")])
- let key5a = ("CLSID", [(null, "{FB20430E-CDC9-45D7-8453-272268002E08}")])
- let key5b = ("CurVer", [(null, "PartCover.CorDriver.Connector.3")])
- let key6 = (@"Software\Classes\PartCover.CorDriver.Connector.3", [(null, "PartCoverConnector2 Object")])
- let key6a = ("CLSID", [(null, "{FB20430E-CDC9-45D7-8453-272268002E08}")])
- let key7 = (@"Software\Classes\PartCover.CorDriver.CorProfiler", [(null, "CorProfiler Object")])
- let key7a = ("CLSID", [(null, "{717FF691-2ADF-4AC0-985F-1DD3C42FDF90}")])
- let key7b = ("CurVer", [(null, "PartCover.CorDriver.CorProfiler.4")])
- let key8 = (@"Software\Classes\PartCover.CorDriver.CorProfiler.4", [(null, "CorProfiler Object")])
- let key8a = ("CLSID", [(null, "{717FF691-2ADF-4AC0-985F-1DD3C42FDF90}")])
- let key9 = (@"Software\Classes\TypeLib\{7d0e6aab-c5fc-4103-aad4-8bf3112a56c4}\4.0", [(null, "PartCover module")])
- let key9a = ("0\win32", [(null, name)])
- let key9b = ("FLAGS", [(null, "0")])
- let key9c = ("HELPDIR", [(null, dir)])
- let keys = [(key1, []);
- (key2, []);
- (key3, [key3a; key3b; key3c; key3d; key3e]);
- (key4, [key4a; key4b; key4c; key4d; key4e]);
- (key5, [key5a; key5b]);
- (key6, [key6a]);
- (key7, [key7a; key7b]);
- (key8, [key8a]);
- (key9, [key9a; key9b; key9c])]
- //-------------------------------------------
- let ReMap (filename:string) (value :(string * string)) =
- match value with
- | (l1, "\0") -> (l1, filename)
- | (l2, "\1") ->
- let where = new FileInfo(filename)
- (l2, where.DirectoryName)
- | _ -> value
- let MakeSubKey (filename:string) (root:RegistryKey) (key:Key) =
- match key with
- | (label, values) ->
- use regkey = root.CreateSubKey(label)
- values
- |> Seq.map (ReMap filename)
- |> Seq.iter regkey.SetValue
- let MakeKey (filename:string) (key:Keys) =
- match key with
- | ((root, values), subkeys) ->
- use regkey = Registry.CurrentUser.CreateSubKey(root)
- values
- |> Seq.map (ReMap filename)
- |> Seq.iter regkey.SetValue
- subkeys |> Seq.iter (MakeSubKey filename regkey)
- let RegisterProfilerForUser filename =
- keys
- |> Seq.iter (MakeKey filename)
- //-------------------------------------------
- let ClearKey (key:Keys) =
- match key with
- | ((root, _), _) -> Registry.CurrentUser.DeleteSubKeyTree(root)
- let UnregisterProfilerForUser () =
- keys
- |> Seq.iter ClearKey
- //-------------------------------------------
- if fsi.CommandLineArgs.Length > 1 then
- RegisterProfilerForUser fsi.CommandLineArgs.[1]
- else
- UnregisterProfilerForUser ()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement