├── .gitignore ├── AgentInstaller └── AgentInstaller.vdproj ├── FastIR-Agent.sln ├── FastIR-Agent ├── App.config ├── FastIR-Agent.csproj ├── FastIR.Designer.cs ├── FastIR.cs ├── FastIR.resx ├── NetworkFastIR.cs ├── PECheck.cs ├── Program.cs ├── ProjectInstaller.Designer.cs ├── ProjectInstaller.cs ├── ProjectInstaller.resx ├── Properties │ └── AssemblyInfo.cs └── packages.config ├── PostInstaller ├── Class1.cs ├── PostInstaller.csproj └── Properties │ └── AssemblyInfo.cs ├── README.md └── utils ├── App.config ├── App.xaml ├── App.xaml.cs ├── Deps.cs ├── MainWindow.xaml ├── MainWindow.xaml.cs ├── Properties ├── AssemblyInfo.cs ├── Resources.Designer.cs ├── Resources.resx ├── Settings.Designer.cs └── Settings.settings ├── app.manifest └── utils.csproj /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.userosscache 8 | *.sln.docstates 9 | 10 | # User-specific files (MonoDevelop/Xamarin Studio) 11 | *.userprefs 12 | 13 | # Build results 14 | [Dd]ebug/ 15 | [Dd]ebugPublic/ 16 | [Rr]elease/ 17 | [Rr]eleases/ 18 | x64/ 19 | x86/ 20 | bld/ 21 | [Bb]in/ 22 | [Oo]bj/ 23 | [Ll]og/ 24 | 25 | # Visual Studio 2015 cache/options directory 26 | .vs/ 27 | # Uncomment if you have tasks that create the project's static files in wwwroot 28 | #wwwroot/ 29 | 30 | # MSTest test Results 31 | [Tt]est[Rr]esult*/ 32 | [Bb]uild[Ll]og.* 33 | 34 | # NUNIT 35 | *.VisualState.xml 36 | TestResult.xml 37 | 38 | # Build Results of an ATL Project 39 | [Dd]ebugPS/ 40 | [Rr]eleasePS/ 41 | dlldata.c 42 | 43 | # DNX 44 | project.lock.json 45 | artifacts/ 46 | 47 | *_i.c 48 | *_p.c 49 | *_i.h 50 | *.ilk 51 | *.meta 52 | *.obj 53 | *.pch 54 | *.pdb 55 | *.pgc 56 | *.pgd 57 | *.rsp 58 | *.sbr 59 | *.tlb 60 | *.tli 61 | *.tlh 62 | *.tmp 63 | *.tmp_proj 64 | *.log 65 | *.vspscc 66 | *.vssscc 67 | .builds 68 | *.pidb 69 | *.svclog 70 | *.scc 71 | 72 | # Chutzpah Test files 73 | _Chutzpah* 74 | 75 | # Visual C++ cache files 76 | ipch/ 77 | *.aps 78 | *.ncb 79 | *.opendb 80 | *.opensdf 81 | *.sdf 82 | *.cachefile 83 | *.VC.db 84 | *.VC.VC.opendb 85 | 86 | # Visual Studio profiler 87 | *.psess 88 | *.vsp 89 | *.vspx 90 | *.sap 91 | 92 | # TFS 2012 Local Workspace 93 | $tf/ 94 | 95 | # Guidance Automation Toolkit 96 | *.gpState 97 | 98 | # ReSharper is a .NET coding add-in 99 | _ReSharper*/ 100 | *.[Rr]e[Ss]harper 101 | *.DotSettings.user 102 | 103 | # JustCode is a .NET coding add-in 104 | .JustCode 105 | 106 | # TeamCity is a build add-in 107 | _TeamCity* 108 | 109 | # DotCover is a Code Coverage Tool 110 | *.dotCover 111 | 112 | # NCrunch 113 | _NCrunch_* 114 | .*crunch*.local.xml 115 | nCrunchTemp_* 116 | 117 | # MightyMoose 118 | *.mm.* 119 | AutoTest.Net/ 120 | 121 | # Web workbench (sass) 122 | .sass-cache/ 123 | 124 | # Installshield output folder 125 | [Ee]xpress/ 126 | 127 | # DocProject is a documentation generator add-in 128 | DocProject/buildhelp/ 129 | DocProject/Help/*.HxT 130 | DocProject/Help/*.HxC 131 | DocProject/Help/*.hhc 132 | DocProject/Help/*.hhk 133 | DocProject/Help/*.hhp 134 | DocProject/Help/Html2 135 | DocProject/Help/html 136 | 137 | # Click-Once directory 138 | publish/ 139 | 140 | # Publish Web Output 141 | *.[Pp]ublish.xml 142 | *.azurePubxml 143 | # TODO: Comment the next line if you want to checkin your web deploy settings 144 | # but database connection strings (with potential passwords) will be unencrypted 145 | *.pubxml 146 | *.publishproj 147 | 148 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 149 | # checkin your Azure Web App publish settings, but sensitive information contained 150 | # in these scripts will be unencrypted 151 | PublishScripts/ 152 | 153 | # NuGet Packages 154 | *.nupkg 155 | # The packages folder can be ignored because of Package Restore 156 | **/packages/* 157 | # except build/, which is used as an MSBuild target. 158 | !**/packages/build/ 159 | # Uncomment if necessary however generally it will be regenerated when needed 160 | #!**/packages/repositories.config 161 | # NuGet v3's project.json files produces more ignoreable files 162 | *.nuget.props 163 | *.nuget.targets 164 | 165 | # Microsoft Azure Build Output 166 | csx/ 167 | *.build.csdef 168 | 169 | # Microsoft Azure Emulator 170 | ecf/ 171 | rcf/ 172 | 173 | # Windows Store app package directories and files 174 | AppPackages/ 175 | BundleArtifacts/ 176 | Package.StoreAssociation.xml 177 | _pkginfo.txt 178 | 179 | # Visual Studio cache files 180 | # files ending in .cache can be ignored 181 | *.[Cc]ache 182 | # but keep track of directories ending in .cache 183 | !*.[Cc]ache/ 184 | 185 | # Others 186 | ClientBin/ 187 | ~$* 188 | *~ 189 | *.dbmdl 190 | *.dbproj.schemaview 191 | *.pfx 192 | *.publishsettings 193 | node_modules/ 194 | orleans.codegen.cs 195 | 196 | # Since there are multiple workflows, uncomment next line to ignore bower_components 197 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 198 | #bower_components/ 199 | 200 | # RIA/Silverlight projects 201 | Generated_Code/ 202 | 203 | # Backup & report files from converting an old project file 204 | # to a newer Visual Studio version. Backup files are not needed, 205 | # because we have git ;-) 206 | _UpgradeReport_Files/ 207 | Backup*/ 208 | UpgradeLog*.XML 209 | UpgradeLog*.htm 210 | 211 | # SQL Server files 212 | *.mdf 213 | *.ldf 214 | 215 | # Business Intelligence projects 216 | *.rdl.data 217 | *.bim.layout 218 | *.bim_*.settings 219 | 220 | # Microsoft Fakes 221 | FakesAssemblies/ 222 | 223 | # GhostDoc plugin setting file 224 | *.GhostDoc.xml 225 | 226 | # Node.js Tools for Visual Studio 227 | .ntvs_analysis.dat 228 | 229 | # Visual Studio 6 build log 230 | *.plg 231 | 232 | # Visual Studio 6 workspace options file 233 | *.opt 234 | 235 | # Visual Studio LightSwitch build output 236 | **/*.HTMLClient/GeneratedArtifacts 237 | **/*.DesktopClient/GeneratedArtifacts 238 | **/*.DesktopClient/ModelManifest.xml 239 | **/*.Server/GeneratedArtifacts 240 | **/*.Server/ModelManifest.xml 241 | _Pvt_Extensions 242 | 243 | # Paket dependency manager 244 | .paket/paket.exe 245 | paket-files/ 246 | 247 | # FAKE - F# Make 248 | .fake/ 249 | 250 | # JetBrains Rider 251 | .idea/ 252 | *.sln.iml 253 | -------------------------------------------------------------------------------- /AgentInstaller/AgentInstaller.vdproj: -------------------------------------------------------------------------------- 1 | "DeployProject" 2 | { 3 | "VSVersion" = "3:800" 4 | "ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}" 5 | "IsWebType" = "8:FALSE" 6 | "ProjectName" = "8:AgentInstaller" 7 | "LanguageId" = "3:1033" 8 | "CodePage" = "3:1252" 9 | "UILanguageId" = "3:1033" 10 | "SccProjectName" = "8:" 11 | "SccLocalPath" = "8:" 12 | "SccAuxPath" = "8:" 13 | "SccProvider" = "8:" 14 | "Hierarchy" 15 | { 16 | "Entry" 17 | { 18 | "MsmKey" = "8:_1BCFFD231A5C40DD8B66099BDE5983C9" 19 | "OwnerKey" = "8:_UNDEFINED" 20 | "MsmSig" = "8:_UNDEFINED" 21 | } 22 | "Entry" 23 | { 24 | "MsmKey" = "8:_265F0BF2CAFB4C415C7011A9204C10E5" 25 | "OwnerKey" = "8:_67AFA0B1660943838D2567F20AEEC0DD" 26 | "MsmSig" = "8:_UNDEFINED" 27 | } 28 | "Entry" 29 | { 30 | "MsmKey" = "8:_67AFA0B1660943838D2567F20AEEC0DD" 31 | "OwnerKey" = "8:_UNDEFINED" 32 | "MsmSig" = "8:_UNDEFINED" 33 | } 34 | "Entry" 35 | { 36 | "MsmKey" = "8:_CBD4654F1EB44986B19E5769516B18AA" 37 | "OwnerKey" = "8:_UNDEFINED" 38 | "MsmSig" = "8:_UNDEFINED" 39 | } 40 | "Entry" 41 | { 42 | "MsmKey" = "8:_UNDEFINED" 43 | "OwnerKey" = "8:_CBD4654F1EB44986B19E5769516B18AA" 44 | "MsmSig" = "8:_UNDEFINED" 45 | } 46 | "Entry" 47 | { 48 | "MsmKey" = "8:_UNDEFINED" 49 | "OwnerKey" = "8:_67AFA0B1660943838D2567F20AEEC0DD" 50 | "MsmSig" = "8:_UNDEFINED" 51 | } 52 | "Entry" 53 | { 54 | "MsmKey" = "8:_UNDEFINED" 55 | "OwnerKey" = "8:_265F0BF2CAFB4C415C7011A9204C10E5" 56 | "MsmSig" = "8:_UNDEFINED" 57 | } 58 | "Entry" 59 | { 60 | "MsmKey" = "8:_UNDEFINED" 61 | "OwnerKey" = "8:_1BCFFD231A5C40DD8B66099BDE5983C9" 62 | "MsmSig" = "8:_UNDEFINED" 63 | } 64 | } 65 | "Configurations" 66 | { 67 | "Debug" 68 | { 69 | "DisplayName" = "8:Debug" 70 | "IsDebugOnly" = "11:TRUE" 71 | "IsReleaseOnly" = "11:FALSE" 72 | "OutputFilename" = "8:Debug\\AgentInstaller.msi" 73 | "PackageFilesAs" = "3:2" 74 | "PackageFileSize" = "3:-2147483648" 75 | "CabType" = "3:1" 76 | "Compression" = "3:2" 77 | "SignOutput" = "11:FALSE" 78 | "CertificateFile" = "8:" 79 | "PrivateKeyFile" = "8:" 80 | "TimeStampServer" = "8:" 81 | "InstallerBootstrapper" = "3:2" 82 | "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" 83 | { 84 | "Enabled" = "11:TRUE" 85 | "PromptEnabled" = "11:TRUE" 86 | "PrerequisitesLocation" = "2:1" 87 | "Url" = "8:" 88 | "ComponentsUrl" = "8:" 89 | "Items" 90 | { 91 | "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.5" 92 | { 93 | "Name" = "8:Microsoft .NET Framework 4.5 (x86 and x64)" 94 | "ProductCode" = "8:.NETFramework,Version=v4.5" 95 | } 96 | } 97 | } 98 | } 99 | "Release" 100 | { 101 | "DisplayName" = "8:Release" 102 | "IsDebugOnly" = "11:FALSE" 103 | "IsReleaseOnly" = "11:TRUE" 104 | "OutputFilename" = "8:Release\\AgentInstaller.msi" 105 | "PackageFilesAs" = "3:2" 106 | "PackageFileSize" = "3:-2147483648" 107 | "CabType" = "3:1" 108 | "Compression" = "3:2" 109 | "SignOutput" = "11:FALSE" 110 | "CertificateFile" = "8:" 111 | "PrivateKeyFile" = "8:" 112 | "TimeStampServer" = "8:" 113 | "InstallerBootstrapper" = "3:2" 114 | "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" 115 | { 116 | "Enabled" = "11:TRUE" 117 | "PromptEnabled" = "11:TRUE" 118 | "PrerequisitesLocation" = "2:2" 119 | "Url" = "8:" 120 | "ComponentsUrl" = "8:DotNetFX45" 121 | "Items" 122 | { 123 | "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.5" 124 | { 125 | "Name" = "8:Microsoft .NET Framework 4.5 (x86 and x64)" 126 | "ProductCode" = "8:.NETFramework,Version=v4.5" 127 | } 128 | } 129 | } 130 | } 131 | } 132 | "Deployable" 133 | { 134 | "CustomAction" 135 | { 136 | "{4AA51A2D-7D85-4A59-BA75-B0809FC8B380}:_03D9B00CE1434D898211EEE27CBF2ABF" 137 | { 138 | "Name" = "8:PostInstaller.dll" 139 | "Condition" = "8:" 140 | "Object" = "8:_CBD4654F1EB44986B19E5769516B18AA" 141 | "FileType" = "3:1" 142 | "InstallAction" = "3:4" 143 | "Arguments" = "8:" 144 | "EntryPoint" = "8:" 145 | "Sequence" = "3:1" 146 | "Identifier" = "8:_5A5FA4F6_E882_41B1_82ED_7A8931FA52A8" 147 | "InstallerClass" = "11:TRUE" 148 | "CustomActionData" = "8:" 149 | } 150 | "{4AA51A2D-7D85-4A59-BA75-B0809FC8B380}:_FDD1D61EBB984539BD19B5167FE474D3" 151 | { 152 | "Name" = "8:PostInstaller.dll" 153 | "Condition" = "8:" 154 | "Object" = "8:_CBD4654F1EB44986B19E5769516B18AA" 155 | "FileType" = "3:1" 156 | "InstallAction" = "3:1" 157 | "Arguments" = "8:" 158 | "EntryPoint" = "8:" 159 | "Sequence" = "3:1" 160 | "Identifier" = "8:_9C30B15E_36DE_4503_B1B5_A65247D98A33" 161 | "InstallerClass" = "11:TRUE" 162 | "CustomActionData" = "8:/EDITC1=\"[EDITC1]\" /EDITC2=\"[EDITC2]\" /EDITC3=\"[EDITC3]\" /EDITC4=\"[EDITC4]\"" 163 | } 164 | } 165 | "DefaultFeature" 166 | { 167 | "Name" = "8:DefaultFeature" 168 | "Title" = "8:" 169 | "Description" = "8:" 170 | } 171 | "ExternalPersistence" 172 | { 173 | "LaunchCondition" 174 | { 175 | "{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_61E0E96D7E474A86B0B76147683F13C9" 176 | { 177 | "Name" = "8:.NET Framework" 178 | "Message" = "8:[VSDNETMSG]" 179 | "FrameworkVersion" = "8:.NETFramework,Version=v4.5" 180 | "AllowLaterVersions" = "11:FALSE" 181 | "InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=395269" 182 | } 183 | } 184 | } 185 | "File" 186 | { 187 | "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_1BCFFD231A5C40DD8B66099BDE5983C9" 188 | { 189 | "AssemblyRegister" = "3:1" 190 | "AssemblyIsInGAC" = "11:FALSE" 191 | "AssemblyAsmDisplayName" = "8:utils, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" 192 | "ScatterAssemblies" 193 | { 194 | "_1BCFFD231A5C40DD8B66099BDE5983C9" 195 | { 196 | "Name" = "8:utils.exe" 197 | "Attributes" = "3:512" 198 | } 199 | } 200 | "SourcePath" = "8:..\\utils\\bin\\Release\\utils.exe" 201 | "TargetName" = "8:" 202 | "Tag" = "8:" 203 | "Folder" = "8:_98A8B13FD56C460782037396BBCF104C" 204 | "Condition" = "8:" 205 | "Transitive" = "11:FALSE" 206 | "Vital" = "11:TRUE" 207 | "ReadOnly" = "11:FALSE" 208 | "Hidden" = "11:FALSE" 209 | "System" = "11:FALSE" 210 | "Permanent" = "11:FALSE" 211 | "SharedLegacy" = "11:FALSE" 212 | "PackageAs" = "3:1" 213 | "Register" = "3:1" 214 | "Exclude" = "11:FALSE" 215 | "IsDependency" = "11:FALSE" 216 | "IsolateTo" = "8:" 217 | } 218 | "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_265F0BF2CAFB4C415C7011A9204C10E5" 219 | { 220 | "AssemblyRegister" = "3:1" 221 | "AssemblyIsInGAC" = "11:FALSE" 222 | "AssemblyAsmDisplayName" = "8:Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL" 223 | "ScatterAssemblies" 224 | { 225 | "_265F0BF2CAFB4C415C7011A9204C10E5" 226 | { 227 | "Name" = "8:Newtonsoft.Json.DLL" 228 | "Attributes" = "3:512" 229 | } 230 | } 231 | "SourcePath" = "8:Newtonsoft.Json.DLL" 232 | "TargetName" = "8:" 233 | "Tag" = "8:" 234 | "Folder" = "8:_98A8B13FD56C460782037396BBCF104C" 235 | "Condition" = "8:" 236 | "Transitive" = "11:FALSE" 237 | "Vital" = "11:TRUE" 238 | "ReadOnly" = "11:FALSE" 239 | "Hidden" = "11:FALSE" 240 | "System" = "11:FALSE" 241 | "Permanent" = "11:FALSE" 242 | "SharedLegacy" = "11:FALSE" 243 | "PackageAs" = "3:1" 244 | "Register" = "3:1" 245 | "Exclude" = "11:FALSE" 246 | "IsDependency" = "11:TRUE" 247 | "IsolateTo" = "8:" 248 | } 249 | "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_67AFA0B1660943838D2567F20AEEC0DD" 250 | { 251 | "AssemblyRegister" = "3:1" 252 | "AssemblyIsInGAC" = "11:FALSE" 253 | "AssemblyAsmDisplayName" = "8:FastIR-Agent, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" 254 | "ScatterAssemblies" 255 | { 256 | "_67AFA0B1660943838D2567F20AEEC0DD" 257 | { 258 | "Name" = "8:FastIR-Agent.exe" 259 | "Attributes" = "3:512" 260 | } 261 | } 262 | "SourcePath" = "8:..\\FastIR-Agent\\bin\\Release\\FastIR-Agent.exe" 263 | "TargetName" = "8:" 264 | "Tag" = "8:" 265 | "Folder" = "8:_98A8B13FD56C460782037396BBCF104C" 266 | "Condition" = "8:" 267 | "Transitive" = "11:FALSE" 268 | "Vital" = "11:TRUE" 269 | "ReadOnly" = "11:FALSE" 270 | "Hidden" = "11:FALSE" 271 | "System" = "11:FALSE" 272 | "Permanent" = "11:FALSE" 273 | "SharedLegacy" = "11:FALSE" 274 | "PackageAs" = "3:1" 275 | "Register" = "3:1" 276 | "Exclude" = "11:FALSE" 277 | "IsDependency" = "11:FALSE" 278 | "IsolateTo" = "8:" 279 | } 280 | "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_CBD4654F1EB44986B19E5769516B18AA" 281 | { 282 | "AssemblyRegister" = "3:1" 283 | "AssemblyIsInGAC" = "11:FALSE" 284 | "AssemblyAsmDisplayName" = "8:PostInstaller, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" 285 | "ScatterAssemblies" 286 | { 287 | "_CBD4654F1EB44986B19E5769516B18AA" 288 | { 289 | "Name" = "8:PostInstaller.dll" 290 | "Attributes" = "3:512" 291 | } 292 | } 293 | "SourcePath" = "8:..\\PostInstaller\\bin\\Release\\PostInstaller.dll" 294 | "TargetName" = "8:" 295 | "Tag" = "8:" 296 | "Folder" = "8:_98A8B13FD56C460782037396BBCF104C" 297 | "Condition" = "8:" 298 | "Transitive" = "11:FALSE" 299 | "Vital" = "11:TRUE" 300 | "ReadOnly" = "11:FALSE" 301 | "Hidden" = "11:FALSE" 302 | "System" = "11:FALSE" 303 | "Permanent" = "11:FALSE" 304 | "SharedLegacy" = "11:FALSE" 305 | "PackageAs" = "3:1" 306 | "Register" = "3:1" 307 | "Exclude" = "11:FALSE" 308 | "IsDependency" = "11:FALSE" 309 | "IsolateTo" = "8:" 310 | } 311 | } 312 | "FileType" 313 | { 314 | } 315 | "Folder" 316 | { 317 | "{1525181F-901A-416C-8A58-119130FE478E}:_04779A75D2664910A0A2705BA61D550C" 318 | { 319 | "Name" = "8:#1916" 320 | "AlwaysCreate" = "11:FALSE" 321 | "Condition" = "8:" 322 | "Transitive" = "11:FALSE" 323 | "Property" = "8:DesktopFolder" 324 | "Folders" 325 | { 326 | } 327 | } 328 | "{3C67513D-01DD-4637-8A68-80971EB9504F}:_98A8B13FD56C460782037396BBCF104C" 329 | { 330 | "DefaultLocation" = "8:[ProgramFiles64Folder][Manufacturer]\\[ProductName]" 331 | "Name" = "8:#1925" 332 | "AlwaysCreate" = "11:FALSE" 333 | "Condition" = "8:" 334 | "Transitive" = "11:FALSE" 335 | "Property" = "8:TARGETDIR" 336 | "Folders" 337 | { 338 | } 339 | } 340 | "{1525181F-901A-416C-8A58-119130FE478E}:_ECF579F934C640AE8167AD3F04EF43C7" 341 | { 342 | "Name" = "8:#1919" 343 | "AlwaysCreate" = "11:FALSE" 344 | "Condition" = "8:" 345 | "Transitive" = "11:FALSE" 346 | "Property" = "8:ProgramMenuFolder" 347 | "Folders" 348 | { 349 | } 350 | } 351 | } 352 | "LaunchCondition" 353 | { 354 | "{836E08B8-0285-4809-BA42-01DB6754A45D}:_282EA9028B814E838EA3C65C976E90F5" 355 | { 356 | "Name" = "8:Admin" 357 | "Condition" = "8:AdminUser" 358 | "Message" = "8:" 359 | "InstallUrl" = "8:" 360 | } 361 | } 362 | "Locator" 363 | { 364 | } 365 | "MsiBootstrapper" 366 | { 367 | "LangId" = "3:1033" 368 | "RequiresElevation" = "11:FALSE" 369 | } 370 | "Product" 371 | { 372 | "Name" = "8:Microsoft Visual Studio" 373 | "ProductName" = "8:FastIR Agent" 374 | "ProductCode" = "8:{8F24A56D-3C49-4DF8-895D-2877BEF49D27}" 375 | "PackageCode" = "8:{E236FA53-A1F6-4A57-B582-BC32AD362835}" 376 | "UpgradeCode" = "8:{79B44B49-4E50-4C66-975B-60039C90D7EA}" 377 | "AspNetVersion" = "8:4.0.30319.0" 378 | "RestartWWWService" = "11:FALSE" 379 | "RemovePreviousVersions" = "11:TRUE" 380 | "DetectNewerInstalledVersion" = "11:TRUE" 381 | "InstallAllUsers" = "11:TRUE" 382 | "ProductVersion" = "8:1.0.0" 383 | "Manufacturer" = "8:SEKOIA" 384 | "ARPHELPTELEPHONE" = "8:" 385 | "ARPHELPLINK" = "8:" 386 | "Title" = "8:FastIR Agent Installer" 387 | "Subject" = "8:" 388 | "ARPCONTACT" = "8:SEKOIA" 389 | "Keywords" = "8:" 390 | "ARPCOMMENTS" = "8:FastIR Agent installer" 391 | "ARPURLINFOABOUT" = "8:" 392 | "ARPPRODUCTICON" = "8:" 393 | "ARPIconIndex" = "3:0" 394 | "SearchPath" = "8:" 395 | "UseSystemSearchPath" = "11:TRUE" 396 | "TargetPlatform" = "3:1" 397 | "PreBuildEvent" = "8:" 398 | "PostBuildEvent" = "8:" 399 | "RunPostBuildEvent" = "3:0" 400 | } 401 | "Registry" 402 | { 403 | "HKLM" 404 | { 405 | "Keys" 406 | { 407 | "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_882D12C27E6A486995C5BF83CC775011" 408 | { 409 | "Name" = "8:Software" 410 | "Condition" = "8:" 411 | "AlwaysCreate" = "11:FALSE" 412 | "DeleteAtUninstall" = "11:FALSE" 413 | "Transitive" = "11:FALSE" 414 | "Keys" 415 | { 416 | "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_E9390007470A4DD2B1E7ACFDF214BE5B" 417 | { 418 | "Name" = "8:[Manufacturer]" 419 | "Condition" = "8:" 420 | "AlwaysCreate" = "11:FALSE" 421 | "DeleteAtUninstall" = "11:FALSE" 422 | "Transitive" = "11:FALSE" 423 | "Keys" 424 | { 425 | } 426 | "Values" 427 | { 428 | } 429 | } 430 | } 431 | "Values" 432 | { 433 | } 434 | } 435 | } 436 | } 437 | "HKCU" 438 | { 439 | "Keys" 440 | { 441 | "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_BB2CDAE6978440FC9CAE77D919505542" 442 | { 443 | "Name" = "8:Software" 444 | "Condition" = "8:" 445 | "AlwaysCreate" = "11:FALSE" 446 | "DeleteAtUninstall" = "11:FALSE" 447 | "Transitive" = "11:FALSE" 448 | "Keys" 449 | { 450 | "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_22C0B82FBA0D442DBC092B4C299DF612" 451 | { 452 | "Name" = "8:[Manufacturer]" 453 | "Condition" = "8:" 454 | "AlwaysCreate" = "11:FALSE" 455 | "DeleteAtUninstall" = "11:FALSE" 456 | "Transitive" = "11:FALSE" 457 | "Keys" 458 | { 459 | } 460 | "Values" 461 | { 462 | } 463 | } 464 | } 465 | "Values" 466 | { 467 | } 468 | } 469 | } 470 | } 471 | "HKCR" 472 | { 473 | "Keys" 474 | { 475 | } 476 | } 477 | "HKU" 478 | { 479 | "Keys" 480 | { 481 | } 482 | } 483 | "HKPU" 484 | { 485 | "Keys" 486 | { 487 | } 488 | } 489 | } 490 | "Sequences" 491 | { 492 | } 493 | "Shortcut" 494 | { 495 | } 496 | "UserInterface" 497 | { 498 | "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_1BB47C3F35094524910785A72D7AEAE1" 499 | { 500 | "UseDynamicProperties" = "11:FALSE" 501 | "IsDependency" = "11:FALSE" 502 | "SourcePath" = "8:\\VsdBasicDialogs.wim" 503 | } 504 | "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_3FD8BF0E6AD74455B5B29EBFA287C96B" 505 | { 506 | "Name" = "8:#1901" 507 | "Sequence" = "3:1" 508 | "Attributes" = "3:2" 509 | "Dialogs" 510 | { 511 | "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_6BB2FE70DDEA49FBB1F9D90180CB6660" 512 | { 513 | "Sequence" = "3:100" 514 | "DisplayName" = "8:Progress" 515 | "UseDynamicProperties" = "11:TRUE" 516 | "IsDependency" = "11:FALSE" 517 | "SourcePath" = "8:\\VsdProgressDlg.wid" 518 | "Properties" 519 | { 520 | "BannerBitmap" 521 | { 522 | "Name" = "8:BannerBitmap" 523 | "DisplayName" = "8:#1001" 524 | "Description" = "8:#1101" 525 | "Type" = "3:8" 526 | "ContextData" = "8:Bitmap" 527 | "Attributes" = "3:4" 528 | "Setting" = "3:1" 529 | "UsePlugInResources" = "11:TRUE" 530 | } 531 | "ShowProgress" 532 | { 533 | "Name" = "8:ShowProgress" 534 | "DisplayName" = "8:#1009" 535 | "Description" = "8:#1109" 536 | "Type" = "3:5" 537 | "ContextData" = "8:1;True=1;False=0" 538 | "Attributes" = "3:0" 539 | "Setting" = "3:0" 540 | "Value" = "3:1" 541 | "DefaultValue" = "3:1" 542 | "UsePlugInResources" = "11:TRUE" 543 | } 544 | } 545 | } 546 | } 547 | } 548 | "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_4B2AB79A26C84CC39DC3FAAC55B914E4" 549 | { 550 | "Name" = "8:#1902" 551 | "Sequence" = "3:1" 552 | "Attributes" = "3:3" 553 | "Dialogs" 554 | { 555 | "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_0F018C8EB7C54FDEA994C5158AAE0807" 556 | { 557 | "Sequence" = "3:110" 558 | "DisplayName" = "8:Finished" 559 | "UseDynamicProperties" = "11:TRUE" 560 | "IsDependency" = "11:FALSE" 561 | "SourcePath" = "8:\\VsdFinishedDlg.wid" 562 | "Properties" 563 | { 564 | "BannerBitmap" 565 | { 566 | "Name" = "8:BannerBitmap" 567 | "DisplayName" = "8:#1001" 568 | "Description" = "8:#1101" 569 | "Type" = "3:8" 570 | "ContextData" = "8:Bitmap" 571 | "Attributes" = "3:4" 572 | "Setting" = "3:1" 573 | "UsePlugInResources" = "11:TRUE" 574 | } 575 | "UpdateText" 576 | { 577 | "Name" = "8:UpdateText" 578 | "DisplayName" = "8:#1058" 579 | "Description" = "8:#1158" 580 | "Type" = "3:15" 581 | "ContextData" = "8:" 582 | "Attributes" = "3:0" 583 | "Setting" = "3:2" 584 | "Value" = "8:" 585 | "DefaultValue" = "8:#1258" 586 | "UsePlugInResources" = "11:TRUE" 587 | } 588 | } 589 | } 590 | } 591 | } 592 | "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_82CA3354FE7E4FACB070340C675EE215" 593 | { 594 | "Name" = "8:#1900" 595 | "Sequence" = "3:2" 596 | "Attributes" = "3:1" 597 | "Dialogs" 598 | { 599 | "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_042F4E50F96446C7B5A03F95C0C0C510" 600 | { 601 | "Sequence" = "3:300" 602 | "DisplayName" = "8:Confirm Installation" 603 | "UseDynamicProperties" = "11:TRUE" 604 | "IsDependency" = "11:FALSE" 605 | "SourcePath" = "8:\\VsdAdminConfirmDlg.wid" 606 | "Properties" 607 | { 608 | "BannerBitmap" 609 | { 610 | "Name" = "8:BannerBitmap" 611 | "DisplayName" = "8:#1001" 612 | "Description" = "8:#1101" 613 | "Type" = "3:8" 614 | "ContextData" = "8:Bitmap" 615 | "Attributes" = "3:4" 616 | "Setting" = "3:1" 617 | "UsePlugInResources" = "11:TRUE" 618 | } 619 | } 620 | } 621 | "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_5C6090FFC8DB493980EEDC49DDD45BD2" 622 | { 623 | "Sequence" = "3:200" 624 | "DisplayName" = "8:Installation Folder" 625 | "UseDynamicProperties" = "11:TRUE" 626 | "IsDependency" = "11:FALSE" 627 | "SourcePath" = "8:\\VsdAdminFolderDlg.wid" 628 | "Properties" 629 | { 630 | "BannerBitmap" 631 | { 632 | "Name" = "8:BannerBitmap" 633 | "DisplayName" = "8:#1001" 634 | "Description" = "8:#1101" 635 | "Type" = "3:8" 636 | "ContextData" = "8:Bitmap" 637 | "Attributes" = "3:4" 638 | "Setting" = "3:1" 639 | "UsePlugInResources" = "11:TRUE" 640 | } 641 | } 642 | } 643 | "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_703B7F65B67E4171B72A193DC840BEB1" 644 | { 645 | "Sequence" = "3:100" 646 | "DisplayName" = "8:Welcome" 647 | "UseDynamicProperties" = "11:TRUE" 648 | "IsDependency" = "11:FALSE" 649 | "SourcePath" = "8:\\VsdAdminWelcomeDlg.wid" 650 | "Properties" 651 | { 652 | "BannerBitmap" 653 | { 654 | "Name" = "8:BannerBitmap" 655 | "DisplayName" = "8:#1001" 656 | "Description" = "8:#1101" 657 | "Type" = "3:8" 658 | "ContextData" = "8:Bitmap" 659 | "Attributes" = "3:4" 660 | "Setting" = "3:1" 661 | "UsePlugInResources" = "11:TRUE" 662 | } 663 | "CopyrightWarning" 664 | { 665 | "Name" = "8:CopyrightWarning" 666 | "DisplayName" = "8:#1002" 667 | "Description" = "8:#1102" 668 | "Type" = "3:3" 669 | "ContextData" = "8:" 670 | "Attributes" = "3:0" 671 | "Setting" = "3:1" 672 | "Value" = "8:#1202" 673 | "DefaultValue" = "8:#1202" 674 | "UsePlugInResources" = "11:TRUE" 675 | } 676 | "Welcome" 677 | { 678 | "Name" = "8:Welcome" 679 | "DisplayName" = "8:#1003" 680 | "Description" = "8:#1103" 681 | "Type" = "3:3" 682 | "ContextData" = "8:" 683 | "Attributes" = "3:0" 684 | "Setting" = "3:1" 685 | "Value" = "8:#1203" 686 | "DefaultValue" = "8:#1203" 687 | "UsePlugInResources" = "11:TRUE" 688 | } 689 | } 690 | } 691 | } 692 | } 693 | "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_85EA44F357F24CD4A0DAFB7F049146A7" 694 | { 695 | "Name" = "8:#1900" 696 | "Sequence" = "3:1" 697 | "Attributes" = "3:1" 698 | "Dialogs" 699 | { 700 | "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_0A7177433E954464ADBD956B6719450B" 701 | { 702 | "Sequence" = "3:100" 703 | "DisplayName" = "8:Welcome" 704 | "UseDynamicProperties" = "11:TRUE" 705 | "IsDependency" = "11:FALSE" 706 | "SourcePath" = "8:\\VsdWelcomeDlg.wid" 707 | "Properties" 708 | { 709 | "BannerBitmap" 710 | { 711 | "Name" = "8:BannerBitmap" 712 | "DisplayName" = "8:#1001" 713 | "Description" = "8:#1101" 714 | "Type" = "3:8" 715 | "ContextData" = "8:Bitmap" 716 | "Attributes" = "3:4" 717 | "Setting" = "3:1" 718 | "UsePlugInResources" = "11:TRUE" 719 | } 720 | "CopyrightWarning" 721 | { 722 | "Name" = "8:CopyrightWarning" 723 | "DisplayName" = "8:#1002" 724 | "Description" = "8:#1102" 725 | "Type" = "3:3" 726 | "ContextData" = "8:" 727 | "Attributes" = "3:0" 728 | "Setting" = "3:1" 729 | "Value" = "8:#1202" 730 | "DefaultValue" = "8:#1202" 731 | "UsePlugInResources" = "11:TRUE" 732 | } 733 | "Welcome" 734 | { 735 | "Name" = "8:Welcome" 736 | "DisplayName" = "8:#1003" 737 | "Description" = "8:#1103" 738 | "Type" = "3:3" 739 | "ContextData" = "8:" 740 | "Attributes" = "3:0" 741 | "Setting" = "3:1" 742 | "Value" = "8:#1203" 743 | "DefaultValue" = "8:#1203" 744 | "UsePlugInResources" = "11:TRUE" 745 | } 746 | } 747 | } 748 | "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_497C3232BDAF4E59B0331F03DD3D5A4C" 749 | { 750 | "Sequence" = "3:300" 751 | "DisplayName" = "8:Confirm Installation" 752 | "UseDynamicProperties" = "11:TRUE" 753 | "IsDependency" = "11:FALSE" 754 | "SourcePath" = "8:\\VsdConfirmDlg.wid" 755 | "Properties" 756 | { 757 | "BannerBitmap" 758 | { 759 | "Name" = "8:BannerBitmap" 760 | "DisplayName" = "8:#1001" 761 | "Description" = "8:#1101" 762 | "Type" = "3:8" 763 | "ContextData" = "8:Bitmap" 764 | "Attributes" = "3:4" 765 | "Setting" = "3:1" 766 | "UsePlugInResources" = "11:TRUE" 767 | } 768 | } 769 | } 770 | "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_9B3C14E7168B43F29C53A511466F4451" 771 | { 772 | "Sequence" = "3:110" 773 | "DisplayName" = "8:Textboxes (C)" 774 | "UseDynamicProperties" = "11:TRUE" 775 | "IsDependency" = "11:FALSE" 776 | "SourcePath" = "8:\\VsdCustomText3Dlg.wid" 777 | "Properties" 778 | { 779 | "BannerBitmap" 780 | { 781 | "Name" = "8:BannerBitmap" 782 | "DisplayName" = "8:#1001" 783 | "Description" = "8:#1101" 784 | "Type" = "3:8" 785 | "ContextData" = "8:Bitmap" 786 | "Attributes" = "3:4" 787 | "Setting" = "3:1" 788 | "UsePlugInResources" = "11:TRUE" 789 | } 790 | "BannerText" 791 | { 792 | "Name" = "8:BannerText" 793 | "DisplayName" = "8:#1014" 794 | "Description" = "8:#1114" 795 | "Type" = "3:3" 796 | "ContextData" = "8:" 797 | "Attributes" = "3:0" 798 | "Setting" = "3:2" 799 | "Value" = "8:FastIR Agent" 800 | "DefaultValue" = "8:#1214" 801 | "UsePlugInResources" = "11:TRUE" 802 | } 803 | "BodyText" 804 | { 805 | "Name" = "8:BodyText" 806 | "DisplayName" = "8:#1015" 807 | "Description" = "8:#1115" 808 | "Type" = "3:3" 809 | "ContextData" = "8:" 810 | "Attributes" = "3:0" 811 | "Setting" = "3:2" 812 | "Value" = "8:FastIR Agent configuration" 813 | "DefaultValue" = "8:#1215" 814 | "UsePlugInResources" = "11:TRUE" 815 | } 816 | "Edit1Label" 817 | { 818 | "Name" = "8:Edit1Label" 819 | "DisplayName" = "8:#1046" 820 | "Description" = "8:#1146" 821 | "Type" = "3:3" 822 | "ContextData" = "8:" 823 | "Attributes" = "3:0" 824 | "Setting" = "3:2" 825 | "Value" = "8:IP of the server:" 826 | "DefaultValue" = "8:#1246" 827 | "UsePlugInResources" = "11:TRUE" 828 | } 829 | "Edit1Property" 830 | { 831 | "Name" = "8:Edit1Property" 832 | "DisplayName" = "8:#1050" 833 | "Description" = "8:#1150" 834 | "Type" = "3:14" 835 | "ContextData" = "8:Public" 836 | "Attributes" = "3:2" 837 | "Setting" = "3:2" 838 | "Value" = "8:EDITC1" 839 | "DefaultValue" = "8:EDITC1" 840 | "UsePlugInResources" = "11:TRUE" 841 | } 842 | "Edit1Value" 843 | { 844 | "Name" = "8:Edit1Value" 845 | "DisplayName" = "8:#1054" 846 | "Description" = "8:#1154" 847 | "Type" = "3:3" 848 | "ContextData" = "8:" 849 | "Attributes" = "3:0" 850 | "Setting" = "3:1" 851 | "Value" = "8:" 852 | "DefaultValue" = "8:" 853 | "UsePlugInResources" = "11:TRUE" 854 | } 855 | "Edit1Visible" 856 | { 857 | "Name" = "8:Edit1Visible" 858 | "DisplayName" = "8:#1042" 859 | "Description" = "8:#1142" 860 | "Type" = "3:5" 861 | "ContextData" = "8:1;True=1;False=0" 862 | "Attributes" = "3:0" 863 | "Setting" = "3:0" 864 | "Value" = "3:1" 865 | "DefaultValue" = "3:1" 866 | "UsePlugInResources" = "11:TRUE" 867 | } 868 | "Edit2Label" 869 | { 870 | "Name" = "8:Edit2Label" 871 | "DisplayName" = "8:#1047" 872 | "Description" = "8:#1147" 873 | "Type" = "3:3" 874 | "ContextData" = "8:" 875 | "Attributes" = "3:0" 876 | "Setting" = "3:2" 877 | "Value" = "8:Port of the server:" 878 | "DefaultValue" = "8:#1247" 879 | "UsePlugInResources" = "11:TRUE" 880 | } 881 | "Edit2Property" 882 | { 883 | "Name" = "8:Edit2Property" 884 | "DisplayName" = "8:#1051" 885 | "Description" = "8:#1151" 886 | "Type" = "3:14" 887 | "ContextData" = "8:Public" 888 | "Attributes" = "3:2" 889 | "Setting" = "3:2" 890 | "Value" = "8:EDITC2" 891 | "DefaultValue" = "8:EDITC2" 892 | "UsePlugInResources" = "11:TRUE" 893 | } 894 | "Edit2Value" 895 | { 896 | "Name" = "8:Edit2Value" 897 | "DisplayName" = "8:#1055" 898 | "Description" = "8:#1155" 899 | "Type" = "3:3" 900 | "ContextData" = "8:" 901 | "Attributes" = "3:0" 902 | "Setting" = "3:1" 903 | "Value" = "8:" 904 | "DefaultValue" = "8:" 905 | "UsePlugInResources" = "11:TRUE" 906 | } 907 | "Edit2Visible" 908 | { 909 | "Name" = "8:Edit2Visible" 910 | "DisplayName" = "8:#1043" 911 | "Description" = "8:#1143" 912 | "Type" = "3:5" 913 | "ContextData" = "8:1;True=1;False=0" 914 | "Attributes" = "3:0" 915 | "Setting" = "3:0" 916 | "Value" = "3:1" 917 | "DefaultValue" = "3:1" 918 | "UsePlugInResources" = "11:TRUE" 919 | } 920 | "Edit3Label" 921 | { 922 | "Name" = "8:Edit3Label" 923 | "DisplayName" = "8:#1048" 924 | "Description" = "8:#1148" 925 | "Type" = "3:3" 926 | "ContextData" = "8:" 927 | "Attributes" = "3:0" 928 | "Setting" = "3:2" 929 | "Value" = "8:APIKey:" 930 | "DefaultValue" = "8:#1248" 931 | "UsePlugInResources" = "11:TRUE" 932 | } 933 | "Edit3Property" 934 | { 935 | "Name" = "8:Edit3Property" 936 | "DisplayName" = "8:#1052" 937 | "Description" = "8:#1152" 938 | "Type" = "3:14" 939 | "ContextData" = "8:Public" 940 | "Attributes" = "3:2" 941 | "Setting" = "3:2" 942 | "Value" = "8:EDITC3" 943 | "DefaultValue" = "8:EDITC3" 944 | "UsePlugInResources" = "11:TRUE" 945 | } 946 | "Edit3Value" 947 | { 948 | "Name" = "8:Edit3Value" 949 | "DisplayName" = "8:#1056" 950 | "Description" = "8:#1156" 951 | "Type" = "3:3" 952 | "ContextData" = "8:" 953 | "Attributes" = "3:0" 954 | "Setting" = "3:1" 955 | "Value" = "8:" 956 | "DefaultValue" = "8:" 957 | "UsePlugInResources" = "11:TRUE" 958 | } 959 | "Edit3Visible" 960 | { 961 | "Name" = "8:Edit3Visible" 962 | "DisplayName" = "8:#1044" 963 | "Description" = "8:#1144" 964 | "Type" = "3:5" 965 | "ContextData" = "8:1;True=1;False=0" 966 | "Attributes" = "3:0" 967 | "Setting" = "3:0" 968 | "Value" = "3:1" 969 | "DefaultValue" = "3:1" 970 | "UsePlugInResources" = "11:TRUE" 971 | } 972 | "Edit4Label" 973 | { 974 | "Name" = "8:Edit4Label" 975 | "DisplayName" = "8:#1049" 976 | "Description" = "8:#1149" 977 | "Type" = "3:3" 978 | "ContextData" = "8:" 979 | "Attributes" = "3:0" 980 | "Setting" = "3:2" 981 | "Value" = "8:SSL Public key:" 982 | "DefaultValue" = "8:#1249" 983 | "UsePlugInResources" = "11:TRUE" 984 | } 985 | "Edit4Property" 986 | { 987 | "Name" = "8:Edit4Property" 988 | "DisplayName" = "8:#1053" 989 | "Description" = "8:#1153" 990 | "Type" = "3:14" 991 | "ContextData" = "8:Public" 992 | "Attributes" = "3:2" 993 | "Setting" = "3:2" 994 | "Value" = "8:EDITC4" 995 | "DefaultValue" = "8:EDITC4" 996 | "UsePlugInResources" = "11:TRUE" 997 | } 998 | "Edit4Value" 999 | { 1000 | "Name" = "8:Edit4Value" 1001 | "DisplayName" = "8:#1057" 1002 | "Description" = "8:#1157" 1003 | "Type" = "3:3" 1004 | "ContextData" = "8:" 1005 | "Attributes" = "3:0" 1006 | "Setting" = "3:1" 1007 | "Value" = "8:" 1008 | "DefaultValue" = "8:" 1009 | "UsePlugInResources" = "11:TRUE" 1010 | } 1011 | "Edit4Visible" 1012 | { 1013 | "Name" = "8:Edit4Visible" 1014 | "DisplayName" = "8:#1045" 1015 | "Description" = "8:#1145" 1016 | "Type" = "3:5" 1017 | "ContextData" = "8:1;True=1;False=0" 1018 | "Attributes" = "3:0" 1019 | "Setting" = "3:0" 1020 | "Value" = "3:1" 1021 | "DefaultValue" = "3:1" 1022 | "UsePlugInResources" = "11:TRUE" 1023 | } 1024 | } 1025 | } 1026 | } 1027 | } 1028 | "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_BDB60003164D46BFB61DC9C862F2C40D" 1029 | { 1030 | "UseDynamicProperties" = "11:FALSE" 1031 | "IsDependency" = "11:FALSE" 1032 | "SourcePath" = "8:\\VsdUserInterface.wim" 1033 | } 1034 | "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_C0E6E14C03544EBFB0E489617AB0818C" 1035 | { 1036 | "Name" = "8:#1901" 1037 | "Sequence" = "3:2" 1038 | "Attributes" = "3:2" 1039 | "Dialogs" 1040 | { 1041 | "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_0750BE855B6C4EA6BC4E5625385FF091" 1042 | { 1043 | "Sequence" = "3:100" 1044 | "DisplayName" = "8:Progress" 1045 | "UseDynamicProperties" = "11:TRUE" 1046 | "IsDependency" = "11:FALSE" 1047 | "SourcePath" = "8:\\VsdAdminProgressDlg.wid" 1048 | "Properties" 1049 | { 1050 | "BannerBitmap" 1051 | { 1052 | "Name" = "8:BannerBitmap" 1053 | "DisplayName" = "8:#1001" 1054 | "Description" = "8:#1101" 1055 | "Type" = "3:8" 1056 | "ContextData" = "8:Bitmap" 1057 | "Attributes" = "3:4" 1058 | "Setting" = "3:1" 1059 | "UsePlugInResources" = "11:TRUE" 1060 | } 1061 | "ShowProgress" 1062 | { 1063 | "Name" = "8:ShowProgress" 1064 | "DisplayName" = "8:#1009" 1065 | "Description" = "8:#1109" 1066 | "Type" = "3:5" 1067 | "ContextData" = "8:1;True=1;False=0" 1068 | "Attributes" = "3:0" 1069 | "Setting" = "3:0" 1070 | "Value" = "3:1" 1071 | "DefaultValue" = "3:1" 1072 | "UsePlugInResources" = "11:TRUE" 1073 | } 1074 | } 1075 | } 1076 | } 1077 | } 1078 | "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_FB21652EEFAA44C5B327801667B3E53B" 1079 | { 1080 | "Name" = "8:#1902" 1081 | "Sequence" = "3:2" 1082 | "Attributes" = "3:3" 1083 | "Dialogs" 1084 | { 1085 | "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_15CBE5BB716A4550B2CC4732EBC100ED" 1086 | { 1087 | "Sequence" = "3:100" 1088 | "DisplayName" = "8:Finished" 1089 | "UseDynamicProperties" = "11:TRUE" 1090 | "IsDependency" = "11:FALSE" 1091 | "SourcePath" = "8:\\VsdAdminFinishedDlg.wid" 1092 | "Properties" 1093 | { 1094 | "BannerBitmap" 1095 | { 1096 | "Name" = "8:BannerBitmap" 1097 | "DisplayName" = "8:#1001" 1098 | "Description" = "8:#1101" 1099 | "Type" = "3:8" 1100 | "ContextData" = "8:Bitmap" 1101 | "Attributes" = "3:4" 1102 | "Setting" = "3:1" 1103 | "UsePlugInResources" = "11:TRUE" 1104 | } 1105 | } 1106 | } 1107 | } 1108 | } 1109 | } 1110 | "MergeModule" 1111 | { 1112 | } 1113 | "ProjectOutput" 1114 | { 1115 | } 1116 | } 1117 | } 1118 | -------------------------------------------------------------------------------- /FastIR-Agent.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.25123.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FastIR-Agent", "FastIR-Agent\FastIR-Agent.csproj", "{460A2073-E06B-4CB1-AF89-6A88079A6309}" 7 | EndProject 8 | Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "AgentInstaller", "AgentInstaller\AgentInstaller.vdproj", "{D8CB67D1-FF39-407D-A914-A155B5EAB6D6}" 9 | ProjectSection(ProjectDependencies) = postProject 10 | {83C5344F-04E9-41C3-887B-3EA80B593CDE} = {83C5344F-04E9-41C3-887B-3EA80B593CDE} 11 | {460A2073-E06B-4CB1-AF89-6A88079A6309} = {460A2073-E06B-4CB1-AF89-6A88079A6309} 12 | {4E11A1A6-6C94-4796-8B4D-B976075BA312} = {4E11A1A6-6C94-4796-8B4D-B976075BA312} 13 | EndProjectSection 14 | EndProject 15 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PostInstaller", "PostInstaller\PostInstaller.csproj", "{4E11A1A6-6C94-4796-8B4D-B976075BA312}" 16 | EndProject 17 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "utils", "utils\utils.csproj", "{83C5344F-04E9-41C3-887B-3EA80B593CDE}" 18 | EndProject 19 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{A7981A44-ECAE-4CA9-9F03-5EF58C9E9F1C}" 20 | ProjectSection(SolutionItems) = preProject 21 | README.md = README.md 22 | EndProjectSection 23 | EndProject 24 | Global 25 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 26 | Debug|Any CPU = Debug|Any CPU 27 | Release|Any CPU = Release|Any CPU 28 | EndGlobalSection 29 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 30 | {460A2073-E06B-4CB1-AF89-6A88079A6309}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 31 | {460A2073-E06B-4CB1-AF89-6A88079A6309}.Debug|Any CPU.Build.0 = Debug|Any CPU 32 | {460A2073-E06B-4CB1-AF89-6A88079A6309}.Release|Any CPU.ActiveCfg = Release|Any CPU 33 | {460A2073-E06B-4CB1-AF89-6A88079A6309}.Release|Any CPU.Build.0 = Release|Any CPU 34 | {D8CB67D1-FF39-407D-A914-A155B5EAB6D6}.Debug|Any CPU.ActiveCfg = Debug 35 | {D8CB67D1-FF39-407D-A914-A155B5EAB6D6}.Release|Any CPU.ActiveCfg = Release 36 | {D8CB67D1-FF39-407D-A914-A155B5EAB6D6}.Release|Any CPU.Build.0 = Release 37 | {4E11A1A6-6C94-4796-8B4D-B976075BA312}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 38 | {4E11A1A6-6C94-4796-8B4D-B976075BA312}.Debug|Any CPU.Build.0 = Debug|Any CPU 39 | {4E11A1A6-6C94-4796-8B4D-B976075BA312}.Release|Any CPU.ActiveCfg = Release|Any CPU 40 | {4E11A1A6-6C94-4796-8B4D-B976075BA312}.Release|Any CPU.Build.0 = Release|Any CPU 41 | {83C5344F-04E9-41C3-887B-3EA80B593CDE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 42 | {83C5344F-04E9-41C3-887B-3EA80B593CDE}.Debug|Any CPU.Build.0 = Debug|Any CPU 43 | {83C5344F-04E9-41C3-887B-3EA80B593CDE}.Release|Any CPU.ActiveCfg = Release|Any CPU 44 | {83C5344F-04E9-41C3-887B-3EA80B593CDE}.Release|Any CPU.Build.0 = Release|Any CPU 45 | EndGlobalSection 46 | GlobalSection(SolutionProperties) = preSolution 47 | HideSolutionNode = FALSE 48 | EndGlobalSection 49 | EndGlobal 50 | -------------------------------------------------------------------------------- /FastIR-Agent/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /FastIR-Agent/FastIR-Agent.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {460A2073-E06B-4CB1-AF89-6A88079A6309} 8 | WinExe 9 | Properties 10 | FastIR_Agent 11 | FastIR-Agent 12 | v4.5.2 13 | 512 14 | true 15 | 16 | 17 | AnyCPU 18 | true 19 | full 20 | false 21 | bin\Debug\ 22 | DEBUG;TRACE 23 | prompt 24 | 4 25 | 26 | 27 | AnyCPU 28 | pdbonly 29 | true 30 | bin\Release\ 31 | TRACE 32 | prompt 33 | 4 34 | 35 | 36 | 37 | ..\packages\Newtonsoft.Json.8.0.3\lib\net45\Newtonsoft.Json.dll 38 | True 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | FastIR.cs 56 | 57 | 58 | 59 | 60 | 61 | Component 62 | 63 | 64 | ProjectInstaller.cs 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | FastIR.cs 75 | 76 | 77 | ProjectInstaller.cs 78 | 79 | 80 | 81 | 88 | -------------------------------------------------------------------------------- /FastIR-Agent/FastIR.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace FastIR_Agent 2 | { 3 | partial class FastIR 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Component Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.eventLog = new System.Diagnostics.EventLog(); 32 | ((System.ComponentModel.ISupportInitialize)(this.eventLog)).BeginInit(); 33 | // 34 | // FastIR 35 | // 36 | this.ServiceName = "FastIR"; 37 | ((System.ComponentModel.ISupportInitialize)(this.eventLog)).EndInit(); 38 | 39 | } 40 | 41 | #endregion 42 | 43 | private System.Diagnostics.EventLog eventLog; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /FastIR-Agent/FastIR.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using network_appli; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.ComponentModel; 6 | using System.Data; 7 | using System.Diagnostics; 8 | using System.IO; 9 | using System.Linq; 10 | using System.Runtime.InteropServices; 11 | using System.ServiceProcess; 12 | using System.Text; 13 | using System.Threading.Tasks; 14 | using Newtonsoft.Json; 15 | using System.Security.Cryptography; 16 | using System.Net; 17 | 18 | public enum ServiceState 19 | { 20 | SERVICE_STOPPED = 0x00000001, 21 | SERVICE_START_PENDING = 0x00000002, 22 | SERVICE_STOP_PENDING = 0x00000003, 23 | SERVICE_RUNNING = 0x00000004, 24 | SERVICE_CONTINUE_PENDING = 0x00000005, 25 | SERVICE_PAUSE_PENDING = 0x00000006, 26 | SERVICE_PAUSED = 0x00000007, 27 | } 28 | 29 | [StructLayout(LayoutKind.Sequential)] 30 | public struct ServiceStatus 31 | { 32 | public uint dwServiceType; 33 | public ServiceState dwCurrentState; 34 | public uint dwControlsAccepted; 35 | public uint dwWin32ExitCode; 36 | public uint dwServiceSpecificExitCode; 37 | public uint dwCheckPoint; 38 | public uint dwWaitHint; 39 | }; 40 | 41 | public struct Params 42 | { 43 | public string URL; 44 | public string Port; 45 | public string APIKey; 46 | public int RefreshMin; 47 | public string ApplicationPath; 48 | public string lpk; 49 | }; 50 | 51 | public class ReturnJson 52 | { 53 | public string Appli { get; set; } 54 | public string Version { get; set; } 55 | public string Return { get; set; } 56 | public string Data { get; set; } 57 | public string Order { get; set; } 58 | public string Binary { get; set; } 59 | } 60 | 61 | namespace FastIR_Agent 62 | { 63 | public partial class FastIR : ServiceBase 64 | { 65 | [DllImport("advapi32.dll", SetLastError = true)] 66 | private static extern bool SetServiceStatus(IntPtr handle, ref ServiceStatus serviceStatus); 67 | 68 | System.Timers.Timer timer = new System.Timers.Timer(); 69 | Params P; 70 | 71 | public FastIR() 72 | { 73 | InitializeComponent(); 74 | if (!System.Diagnostics.EventLog.SourceExists("FastIR")) 75 | { 76 | System.Diagnostics.EventLog.CreateEventSource("FastIR", "Application"); 77 | } 78 | eventLog.Source = "FastIR"; 79 | eventLog.Log = "Application"; 80 | } 81 | 82 | protected override void OnStart(string[] args) 83 | { 84 | try 85 | { 86 | SetServiceState(ServiceState.SERVICE_START_PENDING, 100000); 87 | try 88 | { 89 | P.RefreshMin = Int32.Parse(ReadKey("RefreshMin")); 90 | } 91 | catch { P.RefreshMin = 60; } 92 | eventLog.WriteEntry("FastIR Agent: the service is started. Refresh every "+ P.RefreshMin +" minutes", EventLogEntryType.Information); 93 | timer.Interval = 60000 * P.RefreshMin; // 60 seconds 94 | timer.Elapsed += new System.Timers.ElapsedEventHandler(this.OnTimer); 95 | timer.Start(); 96 | SetServiceState(ServiceState.SERVICE_RUNNING); 97 | } catch {SetServiceState(ServiceState.SERVICE_STOPPED); } 98 | } 99 | 100 | protected override void OnStop() 101 | { 102 | try 103 | { 104 | SetServiceState(ServiceState.SERVICE_STOP_PENDING, 100000); 105 | eventLog.WriteEntry("FastIR Agent: the service is stopped", EventLogEntryType.Information); 106 | timer.Close(); 107 | SetServiceState(ServiceState.SERVICE_STOPPED); 108 | } catch { SetServiceState(ServiceState.SERVICE_STOPPED); } 109 | } 110 | 111 | private void SetServiceState(ServiceState state, uint waitHint = 0) 112 | { 113 | ServiceStatus serviceStatus = new ServiceStatus(); 114 | serviceStatus.dwCurrentState = state; 115 | serviceStatus.dwWaitHint = waitHint; 116 | SetServiceStatus(this.ServiceHandle, ref serviceStatus); 117 | } 118 | 119 | private string GetSHA256(string fileName) 120 | { 121 | using (var sha256 = SHA256.Create()) 122 | { 123 | using (var stream = File.OpenRead(fileName)) 124 | { 125 | return BitConverter.ToString(sha256.ComputeHash(stream)).Replace("-", string.Empty); 126 | } 127 | } 128 | } 129 | 130 | private void OnTimer(object sender, System.Timers.ElapsedEventArgs args) 131 | { 132 | EventLog.WriteEntry("FastIR Agent: check for order...", EventLogEntryType.Information); 133 | //Get keys 134 | P.URL = ReadKey("URL"); 135 | P.Port = ReadKey("Port"); 136 | P.APIKey = ReadKey("APIKey"); 137 | P.lpk = ReadKey("PUBLIC_SSL"); 138 | string exe = Process.GetCurrentProcess().MainModule.FileName; 139 | P.ApplicationPath = Path.GetDirectoryName(exe); 140 | // 141 | if (P.Port.Equals(null) || P.URL.Equals(null) || P.lpk.Equals(null) || P.APIKey.Equals(null)) 142 | { 143 | EventLog.WriteEntry("FastIR Agent: Bad URL, Port, or SSL Public key in the configuration...", EventLogEntryType.Error); 144 | ServiceController sc = new ServiceController("FastIR"); 145 | sc.Stop(); 146 | sc.Close(); 147 | } 148 | else 149 | { 150 | EventLog.WriteEntry("FastIR Agent: URL: " + P.URL + ":" + P.Port + ".", EventLogEntryType.Information); 151 | NetworkFastIR prop = new NetworkFastIR(P.URL, P.Port, P.lpk); 152 | ret r = prop.query(""); 153 | if (r.SSL_status) 154 | { 155 | ReturnJson rj; 156 | try 157 | { 158 | rj = JsonConvert.DeserializeObject(r.Web_return); 159 | EventLog.WriteEntry("FastIR Agent: Connection established to the server", EventLogEntryType.Information); 160 | //Get new FastIR binary 161 | string arch = null; 162 | if (Environment.Is64BitOperatingSystem) 163 | arch = "x64"; 164 | else 165 | arch = "x86"; 166 | string sha256 = ""; 167 | try 168 | { 169 | sha256 = GetSHA256(P.ApplicationPath+"\\FastIR.exe"); 170 | } 171 | catch { } 172 | string POST = "APIKey=" + P.APIKey + "&sha256=" + sha256 + "&arch=" + arch; 173 | r = prop.query("getbinary/", POST); 174 | if (r.SSL_status) 175 | { 176 | try 177 | { 178 | rj = JsonConvert.DeserializeObject(r.Web_return); 179 | } 180 | catch { rj = null; } 181 | 182 | if (rj.Equals(null)) 183 | EventLog.WriteEntry("FastIR Agent: bad json from the server", EventLogEntryType.Error); 184 | else if (rj.Return.Equals("KO")) 185 | EventLog.WriteEntry("FastIR Agent: bad request: "+rj.Data, EventLogEntryType.Error); 186 | else 187 | { 188 | if (rj.Binary.Equals("1")) 189 | { 190 | EventLog.WriteEntry("FastIR Agent: new FastIR binary available", EventLogEntryType.Information); 191 | try 192 | { 193 | byte[] data = Convert.FromBase64String(rj.Data); 194 | File.WriteAllBytes(P.ApplicationPath + "\\FastIR.exe", data); 195 | } 196 | catch { EventLog.WriteEntry("FastIR Agent: cannot download the new FastIR binary", EventLogEntryType.Error); } 197 | } 198 | else 199 | EventLog.WriteEntry("FastIR Agent: no new FastIR binary", EventLogEntryType.Information); 200 | } 201 | } 202 | else 203 | EventLog.WriteEntry("FastIR Agent: Bad SSL or URL", EventLogEntryType.Error); 204 | 205 | //Get Order 206 | POST = "APIKey=" + P.APIKey + "&hostname=" + Dns.GetHostName(); 207 | r = prop.query("getorder/", POST); 208 | if (r.SSL_status) 209 | { 210 | try 211 | { 212 | rj = JsonConvert.DeserializeObject(r.Web_return); 213 | } 214 | catch { rj = null; } 215 | 216 | if (rj.Equals(null)) 217 | EventLog.WriteEntry("FastIR Agent: bad json from the server", EventLogEntryType.Error); 218 | else if (rj.Return.Equals("KO")) 219 | EventLog.WriteEntry("FastIR Agent: bad request: " + rj.Data, EventLogEntryType.Error); 220 | else 221 | { 222 | if (rj.Order.Equals("1")) 223 | { 224 | EventLog.WriteEntry("FastIR Agent: an order exist for the machine: "+Dns.GetHostName(), EventLogEntryType.Information); 225 | try 226 | { 227 | PECheck pe = new PECheck(); 228 | byte[] data = Convert.FromBase64String(rj.Data); 229 | File.WriteAllBytes(P.ApplicationPath + "\\FastIR.conf", data); 230 | EventLog.WriteEntry("FastIR Agent: the new config file is created.", EventLogEntryType.Information); 231 | if (pe.checkfile(P.ApplicationPath + "\\FastIR.exe")) 232 | { 233 | using(Process process = new Process()) 234 | { 235 | EventLog.WriteEntry("FastIR Agent: execution of the collect.", EventLogEntryType.Information); 236 | process.StartInfo.FileName = P.ApplicationPath + "\\FastIR.exe"; 237 | process.StartInfo.Arguments = "--profile " + P.ApplicationPath + "\\FastIR.conf"; 238 | process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 239 | process.Start(); 240 | } 241 | } else 242 | { 243 | EventLog.WriteEntry("FastIR Agent: bad signature.", EventLogEntryType.Error); 244 | } 245 | } 246 | catch { EventLog.WriteEntry("FastIR Agent: cannot download the config file", EventLogEntryType.Error); } 247 | } 248 | else 249 | EventLog.WriteEntry("FastIR Agent: no order for the machine: "+ Dns.GetHostName(), EventLogEntryType.Information); 250 | } 251 | } 252 | else 253 | EventLog.WriteEntry("FastIR Agent: Bad SSL or URL", EventLogEntryType.Error); 254 | } 255 | catch { EventLog.WriteEntry("FastIR Agent: bad json from the server", EventLogEntryType.Error); } 256 | } 257 | else 258 | EventLog.WriteEntry("FastIR Agent: Bad SSL or URL", EventLogEntryType.Error); 259 | } 260 | } 261 | 262 | private string ReadKey(string KeyName) 263 | { 264 | const string HKLMRoot = "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\FastIR"; 265 | try 266 | { 267 | string Value = (string)Registry.GetValue(HKLMRoot, KeyName, null); 268 | return Value; 269 | } 270 | catch 271 | { 272 | return null; 273 | } 274 | } 275 | } 276 | } 277 | -------------------------------------------------------------------------------- /FastIR-Agent/FastIR.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | 124 | False 125 | 126 | -------------------------------------------------------------------------------- /FastIR-Agent/NetworkFastIR.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Net; 6 | using System.Net.Security; 7 | using System.Security.Cryptography.X509Certificates; 8 | using System.Text; 9 | using System.Threading.Tasks; 10 | 11 | public struct ret 12 | { 13 | public bool SSL_status; 14 | public string Web_return; 15 | }; 16 | 17 | namespace network_appli 18 | { 19 | class NetworkFastIR 20 | { 21 | private string host; 22 | private string port; 23 | private string url; 24 | private string lpk; 25 | 26 | // CF http://stackoverflow.com/questions/1193529/how-to-store-retreieve-rsa-public-private-key 27 | 28 | public NetworkFastIR(string host, string port, string public_key) 29 | { 30 | this.host = host; 31 | this.port = port; 32 | this.lpk = public_key; 33 | this.url = "https://" + this.host + ":" + this.port + "/"; 34 | } 35 | 36 | private bool PinPublicKey(object sender, X509Certificate certificate, X509Chain chain, 37 | SslPolicyErrors sslPolicyErrors) 38 | { 39 | if (certificate.Equals(null)) 40 | return false; 41 | String pk = certificate.GetPublicKeyString(); 42 | if (pk.Equals(this.lpk.ToUpper())) 43 | return true; 44 | return false; 45 | } 46 | 47 | public ret query(string uri, string POST = null) 48 | { 49 | ret r; 50 | ServicePointManager.ServerCertificateValidationCallback = PinPublicKey; 51 | ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; 52 | 53 | try 54 | { 55 | string ret = null; 56 | WebRequest wr = WebRequest.Create(this.url + uri); 57 | if (POST != null) 58 | { 59 | wr.Method = "POST"; 60 | byte[] byteArray = Encoding.UTF8.GetBytes(POST); 61 | wr.ContentType = "application/x-www-form-urlencoded"; 62 | wr.ContentLength = byteArray.Length; 63 | using (Stream dataStream = wr.GetRequestStream()) 64 | { 65 | dataStream.Write(byteArray, 0, byteArray.Length); 66 | } 67 | } 68 | using (WebResponse response = wr.GetResponse()) 69 | { 70 | using (Stream ReceiveStream = response.GetResponseStream()) 71 | { 72 | Encoding encode = System.Text.Encoding.GetEncoding("utf-8"); 73 | using (StreamReader readStream = new StreamReader(ReceiveStream, encode)) 74 | { 75 | Char[] read = new Char[256]; 76 | int count = readStream.Read(read, 0, 256); 77 | while (count > 0) 78 | { 79 | // Dump the 256 characters on a string and display the string onto the console. 80 | String str = new String(read, 0, count); 81 | ret = ret + str; 82 | count = readStream.Read(read, 0, 256); 83 | } 84 | } 85 | } 86 | } 87 | r.SSL_status = true; 88 | r.Web_return = ret; 89 | return r; 90 | } 91 | catch 92 | { 93 | r.SSL_status = false; 94 | r.Web_return = null; 95 | return r; 96 | } 97 | } 98 | } 99 | } -------------------------------------------------------------------------------- /FastIR-Agent/PECheck.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Security.Cryptography.X509Certificates; 6 | using System.Text; 7 | using System.Threading.Tasks; 8 | 9 | namespace FastIR_Agent 10 | { 11 | class PECheck 12 | { 13 | // SEKOIA Public key for binary signature 14 | private static String SEKOIA_PUBKEY = "3082010A0282010100CF8F6995A286734FF205FF1F5F" + 15 | "36F8AC0BDA4FE6D11A9232CA5C73BB0B13BA53A330F4" + 16 | "BA738682D2121B0C8471CA67757CD5727F6889ABE328" + 17 | "44644040EBE623CB2A0C93C857DA4C635D152CBAA4CC" + 18 | "5D2C37268623EE46BF5C90AAEDC5F7658068E5F24E49" + 19 | "6FBB41741CCE4B57A81006F5936A34878565BE02A438" + 20 | "316BB2047F139E9DFEE9F1273383763E75B1E46980DF" + 21 | "EDDD268FB10868E62329BBB6001A65B73C06D81358F8" + 22 | "E54577CA053BB7EFFEC44562CABAF45E3AA676FD4B00" + 23 | "50522371A33B5F51535ADB2FB4973D30AE02BD43FB3C" + 24 | "38EE6470E103A0C29ED913ED28E3233B934C360C0C7F" + 25 | "3CA05A607DB9E9C97A45B0450C0E4C16416DB1B4963A" + 26 | "CF0203010001"; 27 | 28 | public bool checkfile(string filePath) 29 | { 30 | if (!File.Exists(filePath)) 31 | return false; 32 | 33 | X509Certificate2 theCertificate; 34 | try 35 | { 36 | X509Certificate theSigner = X509Certificate.CreateFromSignedFile(filePath); 37 | theCertificate = new X509Certificate2(theSigner); 38 | } 39 | catch { return false; } 40 | if (theCertificate.GetPublicKeyString().Equals(SEKOIA_PUBKEY)) 41 | return true; 42 | else 43 | return false; 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /FastIR-Agent/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.ServiceProcess; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FastIR_Agent 9 | { 10 | static class Program 11 | { 12 | /// 13 | /// The main entry point for the application. 14 | /// 15 | static void Main() 16 | { 17 | ServiceBase[] ServicesToRun; 18 | ServicesToRun = new ServiceBase[] 19 | { 20 | new FastIR() 21 | }; 22 | ServiceBase.Run(ServicesToRun); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /FastIR-Agent/ProjectInstaller.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace FastIR_Agent 2 | { 3 | partial class ProjectInstaller 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Component Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller(); 32 | this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller(); 33 | // 34 | // serviceProcessInstaller1 35 | // 36 | this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem; 37 | this.serviceProcessInstaller1.Password = null; 38 | this.serviceProcessInstaller1.Username = null; 39 | this.serviceProcessInstaller1.AfterInstall += new System.Configuration.Install.InstallEventHandler(this.serviceProcessInstaller1_AfterInstall); 40 | // 41 | // serviceInstaller1 42 | // 43 | this.serviceInstaller1.Description = "FastIR Agent"; 44 | this.serviceInstaller1.DisplayName = "FastIR Agent"; 45 | this.serviceInstaller1.ServiceName = "FastIR"; 46 | this.serviceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic; 47 | this.serviceInstaller1.AfterInstall += new System.Configuration.Install.InstallEventHandler(this.serviceInstaller1_AfterInstall); 48 | // 49 | // ProjectInstaller 50 | // 51 | this.Installers.AddRange(new System.Configuration.Install.Installer[] { 52 | this.serviceProcessInstaller1, 53 | this.serviceInstaller1}); 54 | 55 | } 56 | 57 | #endregion 58 | 59 | private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1; 60 | private System.ServiceProcess.ServiceInstaller serviceInstaller1; 61 | } 62 | } -------------------------------------------------------------------------------- /FastIR-Agent/ProjectInstaller.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using System.ComponentModel; 5 | using System.Configuration.Install; 6 | using System.Linq; 7 | using System.Threading.Tasks; 8 | 9 | namespace FastIR_Agent 10 | { 11 | [RunInstaller(true)] 12 | public partial class ProjectInstaller : System.Configuration.Install.Installer 13 | { 14 | public ProjectInstaller() 15 | { 16 | InitializeComponent(); 17 | } 18 | 19 | private void serviceProcessInstaller1_AfterInstall(object sender, InstallEventArgs e) 20 | { 21 | 22 | } 23 | 24 | private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e) 25 | { 26 | 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /FastIR-Agent/ProjectInstaller.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 73 122 | 123 | 124 | 14, 20 125 | 126 | 127 | False 128 | 129 | -------------------------------------------------------------------------------- /FastIR-Agent/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("FastIR-Agent")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("FastIR-Agent")] 13 | [assembly: AssemblyCopyright("Copyright © 2016")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("460a2073-e06b-4cb1-af89-6a88079a6309")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /FastIR-Agent/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /PostInstaller/Class1.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using System; 3 | using System.Collections; 4 | using System.Collections.Generic; 5 | using System.ComponentModel; 6 | using System.Configuration.Install; 7 | using System.Diagnostics; 8 | using System.Linq; 9 | using System.ServiceProcess; 10 | using System.Text; 11 | using System.Threading.Tasks; 12 | 13 | 14 | [RunInstaller(true)] 15 | public class Install : Installer 16 | { 17 | public Install() 18 | { 19 | } 20 | 21 | protected override void OnBeforeUninstall(IDictionary savedState) 22 | { 23 | //Unregister the service 24 | using (Process process = new Process()) 25 | { 26 | if (Environment.Is64BitOperatingSystem) 27 | process.StartInfo.FileName = "C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\installutil.exe"; 28 | else 29 | process.StartInfo.FileName = "C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\installutil.exe"; 30 | process.StartInfo.Arguments = "/u \"c:\\Program Files\\SEKOIA\\FastIR Agent\\FastIR-agent.exe\""; 31 | process.StartInfo.WindowStyle = ProcessWindowStyle.Normal; 32 | process.Start(); 33 | process.WaitForExit(); 34 | } 35 | 36 | base.OnAfterInstall(savedState); 37 | } 38 | 39 | protected override void OnAfterInstall(IDictionary savedState) 40 | { 41 | 42 | //Register the service 43 | using (Process process = new Process()) 44 | { 45 | process.StartInfo.FileName = "C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\installutil.exe"; 46 | process.StartInfo.Arguments = "\"c:\\Program Files\\SEKOIA\\FastIR Agent\\FastIR-agent.exe\""; 47 | process.StartInfo.WindowStyle = ProcessWindowStyle.Normal; 48 | process.Start(); 49 | process.WaitForExit(); 50 | } 51 | 52 | 53 | //Add parameters got from the interface 54 | string URL = Context.Parameters["EDITC1"]; 55 | string Port = Context.Parameters["EDITC2"]; 56 | string APIKey = Context.Parameters["EDITC3"]; 57 | string SSL = Context.Parameters["EDITC4"]; 58 | 59 | const string HKLMRoot = "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\FastIR"; 60 | try { Registry.SetValue(HKLMRoot, "URL", URL); } 61 | catch { } 62 | try { Registry.SetValue(HKLMRoot, "Port", Port); } 63 | catch { } 64 | try { Registry.SetValue(HKLMRoot, "APIKey", APIKey); } 65 | catch { } 66 | try { Registry.SetValue(HKLMRoot, "PUBLIC_SSL", SSL); } 67 | catch { } 68 | try { Registry.SetValue(HKLMRoot, "RefreshMin", "60"); } 69 | catch { } 70 | 71 | //Start the service 72 | using (ServiceController sc = new ServiceController("FastIR")) 73 | { 74 | sc.Start(); 75 | } 76 | 77 | base.OnAfterInstall(savedState); 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /PostInstaller/PostInstaller.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {4E11A1A6-6C94-4796-8B4D-B976075BA312} 8 | Library 9 | Properties 10 | PostInstaller 11 | PostInstaller 12 | v4.5.2 13 | 512 14 | 15 | 16 | true 17 | full 18 | false 19 | bin\Debug\ 20 | DEBUG;TRACE 21 | prompt 22 | 4 23 | 24 | 25 | pdbonly 26 | true 27 | bin\Release\ 28 | TRACE 29 | prompt 30 | 4 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | Component 47 | 48 | 49 | 50 | 51 | 58 | -------------------------------------------------------------------------------- /PostInstaller/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("PostInstaller")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("PostInstaller")] 13 | [assembly: AssemblyCopyright("Copyright © 2016")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("4e11a1a6-6c94-4796-8b4d-b976075ba312")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FastIR Collector Agent 2 | 3 | ## Description 4 | FastIR Collector Agent is a Windows service. It connects to a server (like [FastIR Server](https://github.com/SekoiaLab/FastIR_Server)) to receive the order to execute the [FastIR Collector](https://github.com/SekoiaLab/Fastir_Collector). 5 | 6 | ## Installation 7 | The project was compiled and tested on Visual Studio 2015. 8 | 9 | Prerequired: 10 | - download and install this extension: https://visualstudiogallery.msdn.microsoft.com/f1cc3f3e-c300-40a7-8797-c509fb8933b9 11 | - put dotnetfx45_full_x86_x64.exe (available on MSDN) in the directory: C:\Program Files (x86)\Microsoft Visual Studio 14.0\SDK\Bootstrapper\Packages\ 12 | 13 | ## Configuration 14 | The configuration is stored in `HKLM\SYSTEM\CurrentControlSet\Services\FastIR`: 15 |
16 | APIKey -> the API key to connect to the server
17 | Port -> the port of the server
18 | PUBLIC_SSL -> the public key of the HTTPS server (SSL Pinning)
19 | RefreshMin -> the frequency of connections to the server per minute
20 | URL -> the IP/DNS of the server
21 | 
22 | -------------------------------------------------------------------------------- /utils/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /utils/App.xaml: -------------------------------------------------------------------------------- 1 |  6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /utils/App.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Configuration; 4 | using System.Data; 5 | using System.Linq; 6 | using System.Threading.Tasks; 7 | using System.Windows; 8 | 9 | namespace utils 10 | { 11 | /// 12 | /// Interaction logic for App.xaml 13 | /// 14 | public partial class App : Application 15 | { 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /utils/Deps.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Net; 6 | using System.Net.Security; 7 | using System.Security.Cryptography.X509Certificates; 8 | using System.Text; 9 | using System.Threading.Tasks; 10 | using System.Windows; 11 | 12 | namespace utils 13 | { 14 | class Deps 15 | { 16 | public string lpk = null; 17 | public string G_SSL = null; 18 | 19 | public string ReadKey(string KeyName) 20 | { 21 | const string HKLMRoot = "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\FastIR"; 22 | try 23 | { 24 | string Value = (string)Registry.GetValue(HKLMRoot, KeyName, null); 25 | return Value; 26 | } 27 | catch 28 | { 29 | return null; 30 | } 31 | } 32 | 33 | private bool GetPublicKeyCallBack(object sender, X509Certificate certificate, X509Chain chain, 34 | SslPolicyErrors sslPolicyErrors) 35 | { 36 | if (certificate.Equals(null)) 37 | { 38 | G_SSL = "Bad URL or no SSL"; 39 | return false; 40 | } 41 | String pk = certificate.GetPublicKeyString(); 42 | G_SSL = pk; 43 | return true; 44 | } 45 | 46 | public bool GetPublicKey(string URL) 47 | { 48 | ServicePointManager.ServerCertificateValidationCallback = GetPublicKeyCallBack; 49 | ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; 50 | 51 | try 52 | { 53 | WebRequest wr = WebRequest.Create(URL); 54 | using (WebResponse response = wr.GetResponse()) { } 55 | return true; 56 | } 57 | catch { return false; } 58 | } 59 | 60 | public bool CheckURL() 61 | { 62 | string _URL = ReadKey("URL"); 63 | string _Port = ReadKey("Port"); 64 | lpk = ReadKey("PUBLIC_SSL"); 65 | string FULL_URL = "https://" + _URL + ":" + _Port + "/"; 66 | ServicePointManager.ServerCertificateValidationCallback = PinPublicKey; 67 | ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; 68 | 69 | try 70 | { 71 | WebRequest wr = WebRequest.Create(FULL_URL); 72 | wr.Timeout = 1000; 73 | using (WebResponse response = wr.GetResponse()) { } 74 | return true; 75 | } 76 | catch 77 | { 78 | return false; 79 | } 80 | } 81 | 82 | private bool PinPublicKey(object sender, X509Certificate certificate, X509Chain chain, 83 | SslPolicyErrors sslPolicyErrors) 84 | { 85 | if (certificate.Equals(null)) 86 | return false; 87 | String pk = certificate.GetPublicKeyString(); 88 | if (pk.Equals(lpk)) 89 | return true; 90 | return false; 91 | } 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /utils/MainWindow.xaml: -------------------------------------------------------------------------------- 1 |  11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | a 67 | b 68 | c 69 | d 70 | 0 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | URL to test (https://url:port/) 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /utils/MainWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Net; 6 | using System.Net.Security; 7 | using System.Security.Cryptography.X509Certificates; 8 | using System.ServiceProcess; 9 | using System.Text; 10 | using System.Threading.Tasks; 11 | using System.Windows; 12 | using System.Windows.Controls; 13 | using System.Windows.Data; 14 | using System.Windows.Documents; 15 | using System.Windows.Input; 16 | using System.Windows.Media; 17 | using System.Windows.Media.Imaging; 18 | using System.Windows.Navigation; 19 | using System.Windows.Shapes; 20 | 21 | namespace utils 22 | { 23 | /// 24 | /// Interaction logic for MainWindow.xaml 25 | /// 26 | /// 27 | public partial class MainWindow : Window 28 | { 29 | Deps d = new Deps(); 30 | 31 | public MainWindow() 32 | { 33 | InitializeComponent(); 34 | UpdateStatus(); 35 | } 36 | 37 | private void UpdateTab(object sender, SelectionChangedEventArgs e) 38 | { 39 | if (status.IsSelected) 40 | UpdateStatus(); 41 | if (configuration.IsSelected) 42 | UpdateConfiguration(); 43 | if (MISC.IsSelected) 44 | UpdateMisc(); 45 | } 46 | 47 | public void UpdateMisc() 48 | { 49 | 50 | } 51 | 52 | public void UpdateConfiguration() 53 | { 54 | string _RefreshMin = d.ReadKey("RefreshMin"); 55 | string _URL = d.ReadKey("URL"); 56 | string _Port = d.ReadKey("Port"); 57 | string _APIKey = d.ReadKey("APIKey"); 58 | string _SSL = d.ReadKey("PUBLIC_SSL"); 59 | URL.Text = _URL; 60 | Port.Text = _Port; 61 | APIKey.Text = _APIKey; 62 | SSLKey.Text = _SSL; 63 | RefreshMin.Text = _RefreshMin; 64 | } 65 | 66 | public void UpdateStatus() 67 | { 68 | bool service = false; 69 | var converter = new System.Windows.Media.BrushConverter(); 70 | 71 | try 72 | { 73 | ServiceController sc = new ServiceController("FastIR"); 74 | ServiceControllerStatus scs = sc.Status; 75 | if (scs.Equals(ServiceControllerStatus.Running)) 76 | { 77 | Label_FastIR_Service.Foreground = (Brush)converter.ConvertFromString("#008000"); 78 | Label_FastIR_Service.Text = "RUNNING"; 79 | service = true; 80 | StopSC.IsEnabled = true; 81 | StartSC.IsEnabled = false; 82 | } 83 | else 84 | { 85 | Label_FastIR_Service.Foreground = (Brush)converter.ConvertFromString("#FF0000"); 86 | Label_FastIR_Service.Text = "STOPPED"; 87 | service = false; 88 | StopSC.IsEnabled = false; 89 | StartSC.IsEnabled = true; 90 | } 91 | sc.Close(); 92 | } catch { 93 | Label_FastIR_Service.Foreground = (Brush)converter.ConvertFromString("#008B8B"); 94 | Label_FastIR_Service.Text = "does not exist"; 95 | service = false; 96 | StopSC.IsEnabled = false; 97 | StartSC.IsEnabled = false; 98 | } 99 | 100 | if (service.Equals(true)) 101 | { 102 | if (d.CheckURL()) 103 | { 104 | Label_FastIR_Network.Foreground = (Brush)converter.ConvertFromString("#008000"); 105 | Label_FastIR_Network.Text = "OK"; 106 | } 107 | else 108 | { 109 | Label_FastIR_Network.Foreground = (Brush)converter.ConvertFromString("#FF0000"); 110 | Label_FastIR_Network.Text = "KO"; 111 | } 112 | Final.Text = "FastIR Agent is working on the system."; 113 | } 114 | else 115 | { 116 | Label_FastIR_Network.Foreground = (Brush)converter.ConvertFromString("#008B8B"); 117 | Label_FastIR_Network.Text = "N/A"; 118 | Final.Text = "FastIR Agent does work on the system..."; 119 | } 120 | } 121 | 122 | private void UpdateConfBtn(object sender, RoutedEventArgs e) 123 | { 124 | const string HKLMRoot = "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\FastIR"; 125 | try { Registry.SetValue(HKLMRoot, "URL", URL.Text); } 126 | catch { } 127 | try { Registry.SetValue(HKLMRoot, "Port", Port.Text); } 128 | catch { } 129 | try { Registry.SetValue(HKLMRoot, "APIKey", APIKey.Text); } 130 | catch { } 131 | try { Registry.SetValue(HKLMRoot, "PUBLIC_SSL", SSLKey.Text); } 132 | catch { } 133 | try { Registry.SetValue(HKLMRoot, "RefreshMin", RefreshMin.Text); } 134 | catch { } 135 | Label_UpdateBtn.Content = "Configuration updated"; 136 | } 137 | 138 | private void GetSSLBtn(object sender, RoutedEventArgs e) 139 | { 140 | if (d.GetPublicKey(SSL_URL.Text)) 141 | { 142 | if (d.G_SSL.Equals(null)) 143 | SSL_RESPONSE.Text = "Bad URL (SSL is mandatory)"; 144 | else 145 | SSL_RESPONSE.Text = d.G_SSL; 146 | d.G_SSL = null; 147 | } else 148 | { 149 | SSL_RESPONSE.Text = "Bad URL (SSL is mandatory)"; 150 | } 151 | } 152 | 153 | private void StartSCBtn(object sender, RoutedEventArgs e) 154 | { 155 | try 156 | { 157 | using (ServiceController sc = new ServiceController("FastIR")) 158 | { 159 | sc.Start(); 160 | } 161 | } catch { } 162 | UpdateStatus(); 163 | } 164 | 165 | private void StopSCBtn(object sender, RoutedEventArgs e) 166 | { 167 | try 168 | { 169 | using (ServiceController sc = new ServiceController("FastIR")) 170 | { 171 | sc.Stop(); 172 | } 173 | } catch { } 174 | UpdateStatus(); 175 | } 176 | } 177 | } -------------------------------------------------------------------------------- /utils/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Resources; 3 | using System.Runtime.CompilerServices; 4 | using System.Runtime.InteropServices; 5 | using System.Windows; 6 | 7 | // General Information about an assembly is controlled through the following 8 | // set of attributes. Change these attribute values to modify the information 9 | // associated with an assembly. 10 | [assembly: AssemblyTitle("utils")] 11 | [assembly: AssemblyDescription("")] 12 | [assembly: AssemblyConfiguration("")] 13 | [assembly: AssemblyCompany("")] 14 | [assembly: AssemblyProduct("utils")] 15 | [assembly: AssemblyCopyright("Copyright © 2016")] 16 | [assembly: AssemblyTrademark("")] 17 | [assembly: AssemblyCulture("")] 18 | 19 | // Setting ComVisible to false makes the types in this assembly not visible 20 | // to COM components. If you need to access a type in this assembly from 21 | // COM, set the ComVisible attribute to true on that type. 22 | [assembly: ComVisible(false)] 23 | 24 | //In order to begin building localizable applications, set 25 | //CultureYouAreCodingWith in your .csproj file 26 | //inside a . For example, if you are using US english 27 | //in your source files, set the to en-US. Then uncomment 28 | //the NeutralResourceLanguage attribute below. Update the "en-US" in 29 | //the line below to match the UICulture setting in the project file. 30 | 31 | //[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] 32 | 33 | 34 | [assembly: ThemeInfo( 35 | ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located 36 | //(used if a resource is not found in the page, 37 | // or application resource dictionaries) 38 | ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located 39 | //(used if a resource is not found in the page, 40 | // app, or any theme specific resource dictionaries) 41 | )] 42 | 43 | 44 | // Version information for an assembly consists of the following four values: 45 | // 46 | // Major Version 47 | // Minor Version 48 | // Build Number 49 | // Revision 50 | // 51 | // You can specify all the values or you can default the Build and Revision Numbers 52 | // by using the '*' as shown below: 53 | // [assembly: AssemblyVersion("1.0.*")] 54 | [assembly: AssemblyVersion("1.0.0.0")] 55 | [assembly: AssemblyFileVersion("1.0.0.0")] 56 | -------------------------------------------------------------------------------- /utils/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace utils.Properties 12 | { 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources 26 | { 27 | 28 | private static global::System.Resources.ResourceManager resourceMan; 29 | 30 | private static global::System.Globalization.CultureInfo resourceCulture; 31 | 32 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 33 | internal Resources() 34 | { 35 | } 36 | 37 | /// 38 | /// Returns the cached ResourceManager instance used by this class. 39 | /// 40 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 41 | internal static global::System.Resources.ResourceManager ResourceManager 42 | { 43 | get 44 | { 45 | if ((resourceMan == null)) 46 | { 47 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("utils.Properties.Resources", typeof(Resources).Assembly); 48 | resourceMan = temp; 49 | } 50 | return resourceMan; 51 | } 52 | } 53 | 54 | /// 55 | /// Overrides the current thread's CurrentUICulture property for all 56 | /// resource lookups using this strongly typed resource class. 57 | /// 58 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 59 | internal static global::System.Globalization.CultureInfo Culture 60 | { 61 | get 62 | { 63 | return resourceCulture; 64 | } 65 | set 66 | { 67 | resourceCulture = value; 68 | } 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /utils/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | text/microsoft-resx 107 | 108 | 109 | 2.0 110 | 111 | 112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 113 | 114 | 115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | -------------------------------------------------------------------------------- /utils/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace utils.Properties 12 | { 13 | 14 | 15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] 17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase 18 | { 19 | 20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 21 | 22 | public static Settings Default 23 | { 24 | get 25 | { 26 | return defaultInstance; 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /utils/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /utils/app.manifest: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 52 | 59 | 60 | 61 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /utils/utils.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {83C5344F-04E9-41C3-887B-3EA80B593CDE} 8 | WinExe 9 | Properties 10 | utils 11 | utils 12 | v4.5.2 13 | 512 14 | {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 15 | 4 16 | true 17 | 18 | 19 | AnyCPU 20 | true 21 | full 22 | false 23 | bin\Debug\ 24 | DEBUG;TRACE 25 | prompt 26 | 4 27 | 28 | 29 | AnyCPU 30 | pdbonly 31 | true 32 | bin\Release\ 33 | TRACE 34 | prompt 35 | 4 36 | 37 | 38 | app.manifest 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 4.0 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | MSBuild:Compile 60 | Designer 61 | 62 | 63 | MSBuild:Compile 64 | Designer 65 | 66 | 67 | App.xaml 68 | Code 69 | 70 | 71 | 72 | MainWindow.xaml 73 | Code 74 | 75 | 76 | 77 | 78 | Code 79 | 80 | 81 | True 82 | True 83 | Resources.resx 84 | 85 | 86 | True 87 | Settings.settings 88 | True 89 | 90 | 91 | ResXFileCodeGenerator 92 | Resources.Designer.cs 93 | 94 | 95 | 96 | SettingsSingleFileGenerator 97 | Settings.Designer.cs 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 112 | --------------------------------------------------------------------------------