Advertisement
Guest User

Untitled

a guest
May 27th, 2015
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.02 KB | None | 0 0
  1. open System
  2. open System.IO
  3. open Microsoft.Win32
  4.  
  5. type Key = string * list<(string * string)>
  6. type Keys = Key * list<Key>
  7.  
  8. let name = "\0"
  9. let dir = "\1"
  10.  
  11.  
  12. let key1 = (@"Software\Classes\AppID\7D0E6AAB-C5FC-4103-AAD4-8BF3112A56C4", [ (null, "PartCoverCorDriver") ] )
  13. let key2 = (@"Software\Classes\AppID\PartCoverCorDriver.DLL", [ ("AppId", "7d0e6aab-c5fc-4103-aad4-8bf3112a56c4") ] )
  14.  
  15. let key3 = (@"Software\Classes\CLSID\{717FF691-2ADF-4AC0-985F-1DD3C42FDF90}",
  16. [ (null, "CorProfiler Object") ; ("AppId", "7d0e6aab-c5fc-4103-aad4-8bf3112a56c4")] )
  17. let key3a = ("InprocServer32", [(null, name); ("ThreadingModel", "Both")])
  18. let key3b = ("ProgID", [(null, "PartCover.CorDriver.CorProfiler.4")])
  19. let key3c = ("Programmable", [])
  20. let key3d = ("TypeLib", [(null, "{7D0E6AAB-C5FC-4103-AAD4-8BF3112A56C4}")])
  21. let key3e = ("VersionIndependentProgID", [(null, "PartCover.CorDriver.CorProfiler")])
  22.  
  23. let key4 = (@"Software\Classes\CLSID\{FB20430E-CDC9-45D7-8453-272268002E08}", [(null, "PartCoverConnector2 Object"); ("AppId", "7d0e6aab-c5fc-4103-aad4-8bf3112a56c4")])
  24.  
  25. let key4a = ("InprocServer32", [(null, name); ("ThreadingModel", "Both")])
  26. let key4b = ("ProgID", [(null, "PartCover.CorDriver.Connector.3")])
  27. let key4c = ("Programmable", [])
  28. let key4d = ("TypeLib", [null, "{7D0E6AAB-C5FC-4103-AAD4-8BF3112A56C4}"] )
  29. let key4e = ("VersionIndependentProgID", [(null, "PartCover.CorDriver.Connector")])
  30.  
  31. let key5 = (@"Software\Classes\PartCover.CorDriver.Connector", [(null, "PartCoverConnector2 Object")])
  32. let key5a = ("CLSID", [(null, "{FB20430E-CDC9-45D7-8453-272268002E08}")])
  33. let key5b = ("CurVer", [(null, "PartCover.CorDriver.Connector.3")])
  34.  
  35. let key6 = (@"Software\Classes\PartCover.CorDriver.Connector.3", [(null, "PartCoverConnector2 Object")])
  36. let key6a = ("CLSID", [(null, "{FB20430E-CDC9-45D7-8453-272268002E08}")])
  37.  
  38. let key7 = (@"Software\Classes\PartCover.CorDriver.CorProfiler", [(null, "CorProfiler Object")])
  39. let key7a = ("CLSID", [(null, "{717FF691-2ADF-4AC0-985F-1DD3C42FDF90}")])
  40. let key7b = ("CurVer", [(null, "PartCover.CorDriver.CorProfiler.4")])
  41.  
  42. let key8 = (@"Software\Classes\PartCover.CorDriver.CorProfiler.4", [(null, "CorProfiler Object")])
  43. let key8a = ("CLSID", [(null, "{717FF691-2ADF-4AC0-985F-1DD3C42FDF90}")])
  44.  
  45. let key9 = (@"Software\Classes\TypeLib\{7d0e6aab-c5fc-4103-aad4-8bf3112a56c4}\4.0", [(null, "PartCover module")])
  46. let key9a = ("0\win32", [(null, name)])
  47. let key9b = ("FLAGS", [(null, "0")])
  48. let key9c = ("HELPDIR", [(null, dir)])
  49.  
  50. let keys = [(key1, []);
  51. (key2, []);
  52. (key3, [key3a; key3b; key3c; key3d; key3e]);
  53. (key4, [key4a; key4b; key4c; key4d; key4e]);
  54. (key5, [key5a; key5b]);
  55. (key6, [key6a]);
  56. (key7, [key7a; key7b]);
  57. (key8, [key8a]);
  58. (key9, [key9a; key9b; key9c])]
  59.  
  60. //-------------------------------------------
  61. let ReMap (filename:string) (value :(string * string)) =
  62. match value with
  63. | (l1, "\0") -> (l1, filename)
  64. | (l2, "\1") ->
  65. let where = new FileInfo(filename)
  66. (l2, where.DirectoryName)
  67. | _ -> value
  68.  
  69.  
  70. let MakeSubKey (filename:string) (root:RegistryKey) (key:Key) =
  71. match key with
  72. | (label, values) ->
  73. use regkey = root.CreateSubKey(label)
  74. values
  75. |> Seq.map (ReMap filename)
  76. |> Seq.iter regkey.SetValue
  77.  
  78.  
  79. let MakeKey (filename:string) (key:Keys) =
  80. match key with
  81. | ((root, values), subkeys) ->
  82. use regkey = Registry.CurrentUser.CreateSubKey(root)
  83. values
  84. |> Seq.map (ReMap filename)
  85. |> Seq.iter regkey.SetValue
  86.  
  87. subkeys |> Seq.iter (MakeSubKey filename regkey)
  88.  
  89. let RegisterProfilerForUser filename =
  90. keys
  91. |> Seq.iter (MakeKey filename)
  92.  
  93. //-------------------------------------------
  94. let ClearKey (key:Keys) =
  95. match key with
  96. | ((root, _), _) -> Registry.CurrentUser.DeleteSubKeyTree(root)
  97.  
  98.  
  99. let UnregisterProfilerForUser () =
  100. keys
  101. |> Seq.iter ClearKey
  102.  
  103.  
  104. //-------------------------------------------
  105. if fsi.CommandLineArgs.Length > 1 then
  106. RegisterProfilerForUser fsi.CommandLineArgs.[1]
  107. else
  108. UnregisterProfilerForUser ()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement