├── ThirdParty ├── NLog.dll ├── CBFS │ ├── x64 │ │ ├── CBFS5Net.dll │ │ ├── msvcp100.dll │ │ └── msvcr100.dll │ └── 32bit │ │ ├── CBFS5Net.dll │ │ ├── msvcp100.dll │ │ └── msvcr100.dll └── CBFSWixCA │ ├── resource.h │ ├── CBFSWixCA.rc │ ├── CustomAction.def │ ├── CBFS Installer │ ├── Drivers │ │ └── cbfs.cab │ ├── 32bit │ │ └── CBFSInst.dll │ └── cbfsinst.h │ ├── TestTheCBFSInstall │ ├── AnyCPU │ │ └── LiquesceSvc.exe │ ├── TestTheCBFSInstall.wixproj.vspscc │ └── TestTheCBFSInstall.wixproj │ ├── CBFSWixCA.vcxproj.vspscc │ ├── stdafx.cpp │ ├── ExtractUtils.h │ ├── stdafx.h │ ├── DllMain.cpp │ ├── targetver.h │ ├── CBFSInstWrapper.cpp │ ├── ExtractUtils.cpp │ └── CBFSWixCA.vcxproj.filters ├── Liquesce ├── Liquesce.ico ├── Resources │ ├── Liquesce.ico │ ├── Mart-Glaze-Log.ico │ ├── Umut-Pulat-Tulliana-2-K-ppp.ico │ ├── Umut-Pulat-Tulliana-2-Log.ico │ ├── Umut-Pulat-Tulliana-2-Kontact.ico │ ├── Umut-Pulat-Tulliana-2-Nfs-mount.ico │ ├── Umut-Pulat-Tulliana-2-K-cm-system.ico │ ├── Umut-Pulat-Tulliana-2-K-color-edit.ico │ ├── Umut-Pulat-Tulliana-2-Nfs-unmount.ico │ └── Umut-Pulat-Tulliana-2-3floppy-mount.ico ├── Liquesce.csproj.vspscc ├── Properties │ ├── Settings.settings │ ├── Settings.Designer.cs │ └── AssemblyInfo.cs ├── Tabs │ ├── CurrentShares.rtf │ ├── ITab.cs │ ├── Welcome.rtf │ ├── MountingPoints.cs │ ├── Welcome.cs │ ├── Welcome.Designer.cs │ └── CurrentShares.cs ├── Shared │ ├── FlickerFreeRichEditTextBox.cs │ └── SplitContainerEx.cs ├── ExpectedDetailResult.cs ├── DragDropItem.cs ├── app.manifest ├── App.config ├── LogDisplay.cs ├── Program.cs └── TabMainForm.cs ├── LiquesceSvc ├── Liquesce.ico ├── LiquesceSvc.csproj.vspscc ├── CachedRootPathsSystemInfo.cs ├── LowLevelOSAccess │ ├── HGlobal.cs │ ├── SafeHGlobalHandle.cs │ └── Win32Structs.cs ├── LiquesceService.Designer.cs ├── ProjectInstaller.cs ├── Salt.cs ├── app.manifest ├── LiquesceCallBackFacade.cs ├── Properties │ ├── Settings.settings │ ├── Settings.Designer.cs │ └── AssemblyInfo.cs ├── ProjectInstaller.Designer.cs ├── LiquesceFacade.cs └── Program.cs ├── LiquesceTray ├── Icons │ ├── OK.ico │ ├── Stop.ico │ ├── base.ico │ ├── drop.ico │ ├── drop.png │ ├── info.ico │ ├── Config.ico │ ├── Error.ico │ ├── Warning.ico │ ├── backup.ico │ ├── Liquesce.ico │ ├── Question.ico │ ├── free_space.ico │ ├── pie_chart_icon.png │ └── admin_GetBackUp.png ├── Resources │ ├── Stop.ico │ ├── Liquesce.ico │ └── Question.ico ├── LiquesceTray.csproj.vspscc ├── Properties │ ├── Settings.settings │ ├── Settings.Designer.cs │ └── AssemblyInfo.cs ├── DoubleProgressBar.cs ├── HiddenFormToAcceptCloseMessage.cs ├── TransparentLabel.cs ├── App.config ├── app.manifest ├── HiddenFormToAcceptCloseMessage.Designer.cs ├── FreeSpace.Designer.cs ├── StateChangeHandler.cs ├── DropZone.Designer.cs ├── WindowLocation.cs ├── DropZone.cs └── Program.cs ├── Liquesce_Setup ├── Banner.bmp ├── Liquesce_Setup.wixproj.vspscc ├── Liquesce_Setup.wixproj ├── CBFS.wxs ├── Service.wxs └── Client.wxs ├── LiquesceFaçade ├── Liquesce.ico ├── LiquesceFacade.csproj.vspscc ├── ILiquesce.cs ├── ILiquesceCallBack.cs ├── LiquesceProxy.cs ├── Properties │ └── AssemblyInfo.cs ├── Utils.cs ├── LiquesceCallBackProxy.cs └── RWLSExtension.cs ├── LiquesceTrayHelper ├── Warning.ico ├── LiquesceTrayHelper.csproj.vspscc ├── app.manifest ├── Properties │ └── AssemblyInfo.cs └── Program.cs ├── Liquesce.vssscc └── README.md /ThirdParty/NLog.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/ThirdParty/NLog.dll -------------------------------------------------------------------------------- /Liquesce/Liquesce.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/Liquesce/Liquesce.ico -------------------------------------------------------------------------------- /LiquesceSvc/Liquesce.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/LiquesceSvc/Liquesce.ico -------------------------------------------------------------------------------- /LiquesceTray/Icons/OK.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/LiquesceTray/Icons/OK.ico -------------------------------------------------------------------------------- /Liquesce_Setup/Banner.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/Liquesce_Setup/Banner.bmp -------------------------------------------------------------------------------- /LiquesceFaçade/Liquesce.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/LiquesceFaçade/Liquesce.ico -------------------------------------------------------------------------------- /LiquesceTray/Icons/Stop.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/LiquesceTray/Icons/Stop.ico -------------------------------------------------------------------------------- /LiquesceTray/Icons/base.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/LiquesceTray/Icons/base.ico -------------------------------------------------------------------------------- /LiquesceTray/Icons/drop.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/LiquesceTray/Icons/drop.ico -------------------------------------------------------------------------------- /LiquesceTray/Icons/drop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/LiquesceTray/Icons/drop.png -------------------------------------------------------------------------------- /LiquesceTray/Icons/info.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/LiquesceTray/Icons/info.ico -------------------------------------------------------------------------------- /LiquesceTray/Icons/Config.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/LiquesceTray/Icons/Config.ico -------------------------------------------------------------------------------- /LiquesceTray/Icons/Error.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/LiquesceTray/Icons/Error.ico -------------------------------------------------------------------------------- /LiquesceTray/Icons/Warning.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/LiquesceTray/Icons/Warning.ico -------------------------------------------------------------------------------- /LiquesceTray/Icons/backup.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/LiquesceTray/Icons/backup.ico -------------------------------------------------------------------------------- /LiquesceTrayHelper/Warning.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/LiquesceTrayHelper/Warning.ico -------------------------------------------------------------------------------- /Liquesce/Resources/Liquesce.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/Liquesce/Resources/Liquesce.ico -------------------------------------------------------------------------------- /LiquesceTray/Icons/Liquesce.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/LiquesceTray/Icons/Liquesce.ico -------------------------------------------------------------------------------- /LiquesceTray/Icons/Question.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/LiquesceTray/Icons/Question.ico -------------------------------------------------------------------------------- /LiquesceTray/Resources/Stop.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/LiquesceTray/Resources/Stop.ico -------------------------------------------------------------------------------- /ThirdParty/CBFS/x64/CBFS5Net.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/ThirdParty/CBFS/x64/CBFS5Net.dll -------------------------------------------------------------------------------- /ThirdParty/CBFS/x64/msvcp100.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/ThirdParty/CBFS/x64/msvcp100.dll -------------------------------------------------------------------------------- /ThirdParty/CBFS/x64/msvcr100.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/ThirdParty/CBFS/x64/msvcr100.dll -------------------------------------------------------------------------------- /ThirdParty/CBFSWixCA/resource.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/ThirdParty/CBFSWixCA/resource.h -------------------------------------------------------------------------------- /LiquesceTray/Icons/free_space.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/LiquesceTray/Icons/free_space.ico -------------------------------------------------------------------------------- /LiquesceTray/Resources/Liquesce.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/LiquesceTray/Resources/Liquesce.ico -------------------------------------------------------------------------------- /LiquesceTray/Resources/Question.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/LiquesceTray/Resources/Question.ico -------------------------------------------------------------------------------- /ThirdParty/CBFS/32bit/CBFS5Net.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/ThirdParty/CBFS/32bit/CBFS5Net.dll -------------------------------------------------------------------------------- /ThirdParty/CBFS/32bit/msvcp100.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/ThirdParty/CBFS/32bit/msvcp100.dll -------------------------------------------------------------------------------- /ThirdParty/CBFS/32bit/msvcr100.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/ThirdParty/CBFS/32bit/msvcr100.dll -------------------------------------------------------------------------------- /ThirdParty/CBFSWixCA/CBFSWixCA.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/ThirdParty/CBFSWixCA/CBFSWixCA.rc -------------------------------------------------------------------------------- /Liquesce/Resources/Mart-Glaze-Log.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/Liquesce/Resources/Mart-Glaze-Log.ico -------------------------------------------------------------------------------- /LiquesceTray/Icons/pie_chart_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/LiquesceTray/Icons/pie_chart_icon.png -------------------------------------------------------------------------------- /LiquesceTray/Icons/admin_GetBackUp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/LiquesceTray/Icons/admin_GetBackUp.png -------------------------------------------------------------------------------- /ThirdParty/CBFSWixCA/CustomAction.def: -------------------------------------------------------------------------------- 1 | LIBRARY "CBFSWixCA" 2 | 3 | EXPORTS 4 | 5 | InstallCBFS_CA 6 | UninstallCBFS_CA 7 | -------------------------------------------------------------------------------- /Liquesce/Resources/Umut-Pulat-Tulliana-2-K-ppp.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/Liquesce/Resources/Umut-Pulat-Tulliana-2-K-ppp.ico -------------------------------------------------------------------------------- /Liquesce/Resources/Umut-Pulat-Tulliana-2-Log.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/Liquesce/Resources/Umut-Pulat-Tulliana-2-Log.ico -------------------------------------------------------------------------------- /Liquesce/Resources/Umut-Pulat-Tulliana-2-Kontact.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/Liquesce/Resources/Umut-Pulat-Tulliana-2-Kontact.ico -------------------------------------------------------------------------------- /ThirdParty/CBFSWixCA/CBFS Installer/Drivers/cbfs.cab: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/ThirdParty/CBFSWixCA/CBFS Installer/Drivers/cbfs.cab -------------------------------------------------------------------------------- /Liquesce/Resources/Umut-Pulat-Tulliana-2-Nfs-mount.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/Liquesce/Resources/Umut-Pulat-Tulliana-2-Nfs-mount.ico -------------------------------------------------------------------------------- /ThirdParty/CBFSWixCA/CBFS Installer/32bit/CBFSInst.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/ThirdParty/CBFSWixCA/CBFS Installer/32bit/CBFSInst.dll -------------------------------------------------------------------------------- /Liquesce/Resources/Umut-Pulat-Tulliana-2-K-cm-system.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/Liquesce/Resources/Umut-Pulat-Tulliana-2-K-cm-system.ico -------------------------------------------------------------------------------- /Liquesce/Resources/Umut-Pulat-Tulliana-2-K-color-edit.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/Liquesce/Resources/Umut-Pulat-Tulliana-2-K-color-edit.ico -------------------------------------------------------------------------------- /Liquesce/Resources/Umut-Pulat-Tulliana-2-Nfs-unmount.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/Liquesce/Resources/Umut-Pulat-Tulliana-2-Nfs-unmount.ico -------------------------------------------------------------------------------- /Liquesce/Resources/Umut-Pulat-Tulliana-2-3floppy-mount.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/Liquesce/Resources/Umut-Pulat-Tulliana-2-3floppy-mount.ico -------------------------------------------------------------------------------- /ThirdParty/CBFSWixCA/TestTheCBFSInstall/AnyCPU/LiquesceSvc.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smurf-IV/Liquesce/HEAD/ThirdParty/CBFSWixCA/TestTheCBFSInstall/AnyCPU/LiquesceSvc.exe -------------------------------------------------------------------------------- /Liquesce.vssscc: -------------------------------------------------------------------------------- 1 | "" 2 | { 3 | "FILE_VERSION" = "9237" 4 | "ENLISTMENT_CHOICE" = "NEVER" 5 | "PROJECT_FILE_RELATIVE_PATH" = "" 6 | "NUMBER_OF_EXCLUDED_FILES" = "0" 7 | "ORIGINAL_PROJECT_FILE_PATH" = "" 8 | "NUMBER_OF_NESTED_PROJECTS" = "1" 9 | "SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT" 10 | } 11 | -------------------------------------------------------------------------------- /Liquesce/Liquesce.csproj.vspscc: -------------------------------------------------------------------------------- 1 | "" 2 | { 3 | "FILE_VERSION" = "9237" 4 | "ENLISTMENT_CHOICE" = "NEVER" 5 | "PROJECT_FILE_RELATIVE_PATH" = "" 6 | "NUMBER_OF_EXCLUDED_FILES" = "0" 7 | "ORIGINAL_PROJECT_FILE_PATH" = "" 8 | "NUMBER_OF_NESTED_PROJECTS" = "0" 9 | "SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" 10 | } 11 | -------------------------------------------------------------------------------- /LiquesceSvc/LiquesceSvc.csproj.vspscc: -------------------------------------------------------------------------------- 1 | "" 2 | { 3 | "FILE_VERSION" = "9237" 4 | "ENLISTMENT_CHOICE" = "NEVER" 5 | "PROJECT_FILE_RELATIVE_PATH" = "" 6 | "NUMBER_OF_EXCLUDED_FILES" = "0" 7 | "ORIGINAL_PROJECT_FILE_PATH" = "" 8 | "NUMBER_OF_NESTED_PROJECTS" = "0" 9 | "SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" 10 | } 11 | -------------------------------------------------------------------------------- /LiquesceFaçade/LiquesceFacade.csproj.vspscc: -------------------------------------------------------------------------------- 1 | "" 2 | { 3 | "FILE_VERSION" = "9237" 4 | "ENLISTMENT_CHOICE" = "NEVER" 5 | "PROJECT_FILE_RELATIVE_PATH" = "" 6 | "NUMBER_OF_EXCLUDED_FILES" = "0" 7 | "ORIGINAL_PROJECT_FILE_PATH" = "" 8 | "NUMBER_OF_NESTED_PROJECTS" = "0" 9 | "SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" 10 | } 11 | -------------------------------------------------------------------------------- /LiquesceTray/LiquesceTray.csproj.vspscc: -------------------------------------------------------------------------------- 1 | "" 2 | { 3 | "FILE_VERSION" = "9237" 4 | "ENLISTMENT_CHOICE" = "NEVER" 5 | "PROJECT_FILE_RELATIVE_PATH" = "" 6 | "NUMBER_OF_EXCLUDED_FILES" = "0" 7 | "ORIGINAL_PROJECT_FILE_PATH" = "" 8 | "NUMBER_OF_NESTED_PROJECTS" = "0" 9 | "SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" 10 | } 11 | -------------------------------------------------------------------------------- /Liquesce_Setup/Liquesce_Setup.wixproj.vspscc: -------------------------------------------------------------------------------- 1 | "" 2 | { 3 | "FILE_VERSION" = "9237" 4 | "ENLISTMENT_CHOICE" = "NEVER" 5 | "PROJECT_FILE_RELATIVE_PATH" = "" 6 | "NUMBER_OF_EXCLUDED_FILES" = "0" 7 | "ORIGINAL_PROJECT_FILE_PATH" = "" 8 | "NUMBER_OF_NESTED_PROJECTS" = "0" 9 | "SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" 10 | } 11 | -------------------------------------------------------------------------------- /ThirdParty/CBFSWixCA/CBFSWixCA.vcxproj.vspscc: -------------------------------------------------------------------------------- 1 | "" 2 | { 3 | "FILE_VERSION" = "9237" 4 | "ENLISTMENT_CHOICE" = "NEVER" 5 | "PROJECT_FILE_RELATIVE_PATH" = "" 6 | "NUMBER_OF_EXCLUDED_FILES" = "0" 7 | "ORIGINAL_PROJECT_FILE_PATH" = "" 8 | "NUMBER_OF_NESTED_PROJECTS" = "0" 9 | "SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" 10 | } 11 | -------------------------------------------------------------------------------- /LiquesceTrayHelper/LiquesceTrayHelper.csproj.vspscc: -------------------------------------------------------------------------------- 1 | "" 2 | { 3 | "FILE_VERSION" = "9237" 4 | "ENLISTMENT_CHOICE" = "NEVER" 5 | "PROJECT_FILE_RELATIVE_PATH" = "" 6 | "NUMBER_OF_EXCLUDED_FILES" = "0" 7 | "ORIGINAL_PROJECT_FILE_PATH" = "" 8 | "NUMBER_OF_NESTED_PROJECTS" = "0" 9 | "SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" 10 | } 11 | -------------------------------------------------------------------------------- /ThirdParty/CBFSWixCA/stdafx.cpp: -------------------------------------------------------------------------------- 1 | // stdafx.cpp : source file that includes just the standard includes 2 | // CBFSWixCA.pch will be the pre-compiled header 3 | // stdafx.obj will contain the pre-compiled type information 4 | 5 | #include "stdafx.h" 6 | 7 | // TODO: reference any additional headers you need in STDAFX.H 8 | // and not in this file 9 | -------------------------------------------------------------------------------- /ThirdParty/CBFSWixCA/TestTheCBFSInstall/TestTheCBFSInstall.wixproj.vspscc: -------------------------------------------------------------------------------- 1 | "" 2 | { 3 | "FILE_VERSION" = "9237" 4 | "ENLISTMENT_CHOICE" = "NEVER" 5 | "PROJECT_FILE_RELATIVE_PATH" = "" 6 | "NUMBER_OF_EXCLUDED_FILES" = "0" 7 | "ORIGINAL_PROJECT_FILE_PATH" = "" 8 | "NUMBER_OF_NESTED_PROJECTS" = "0" 9 | "SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" 10 | } 11 | -------------------------------------------------------------------------------- /ThirdParty/CBFSWixCA/ExtractUtils.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // Scoping class to ensure that the extracted resource is tidied up 4 | class CExtractUtils 5 | { 6 | public: 7 | CExtractUtils(const HINSTANCE hInstance, const WORD & resourceID); 8 | virtual ~CExtractUtils(); 9 | 10 | bool ExtractResource(); 11 | 12 | TCHAR m_szOutputFilename[MAX_PATH+1]; 13 | 14 | private: 15 | bool CreateTempFile(); 16 | const HINSTANCE m_hInstance; 17 | const WORD m_wResourceID; 18 | }; 19 | 20 | -------------------------------------------------------------------------------- /LiquesceTray/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | True 10 | 11 | 12 | -------------------------------------------------------------------------------- /ThirdParty/CBFSWixCA/stdafx.h: -------------------------------------------------------------------------------- 1 | // stdafx.h : include file for standard system include files, 2 | // or project specific include files that are used frequently, but 3 | // are changed infrequently 4 | // 5 | 6 | #pragma once 7 | 8 | #include "targetver.h" 9 | 10 | #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers 11 | // Windows Header Files: 12 | #include 13 | #include 14 | #include 15 | #include 16 | 17 | // WiX Header Files: 18 | #include 19 | 20 | #include 21 | #include 22 | // TODO: reference additional headers your program requires here 23 | 24 | #include 25 | -------------------------------------------------------------------------------- /Liquesce/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | True 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /ThirdParty/CBFSWixCA/DllMain.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include "stdafx.h" 3 | 4 | /* 5 | hInst : A handle to the DLL module. The value is the base address of the DLL. 6 | The HINSTANCE of a DLL is the same as the HMODULE of the DLL, so hinstDLL 7 | can be used in calls to functions that require a module handle. 8 | */ 9 | HINSTANCE g_hInst = NULL; 10 | 11 | // DllMain - Initialize and cleanup WiX custom action utils. 12 | extern "C" BOOL WINAPI DllMain( 13 | __in HINSTANCE hInst, 14 | __in ULONG ulReason, 15 | __in LPVOID 16 | ) 17 | { 18 | switch(ulReason) 19 | { 20 | case DLL_PROCESS_ATTACH: 21 | g_hInst = hInst; 22 | WcaGlobalInitialize(hInst); 23 | break; 24 | 25 | case DLL_PROCESS_DETACH: 26 | g_hInst = NULL; 27 | WcaGlobalFinalize(); 28 | break; 29 | } 30 | 31 | return TRUE; 32 | } 33 | -------------------------------------------------------------------------------- /LiquesceSvc/CachedRootPathsSystemInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using LiquesceFacade; 5 | 6 | namespace LiquesceSvc 7 | { 8 | internal class CachedRootPathsSystemInfo : CacheHelper 9 | { 10 | public CachedRootPathsSystemInfo(uint cacheLifetimeSeconds) 11 | : base(cacheLifetimeSeconds, true, StringComparer.OrdinalIgnoreCase) 12 | { 13 | // StringComparer.OrdinalIgnoreCase because windows is WriteSensitive 14 | // BUT search ignore 15 | } 16 | 17 | public void RemoveAllTargetDirsFromLookup(string removeDirSource) 18 | { 19 | using (cacheLock.WriteLock()) 20 | { 21 | List toBeRemoved = Cache.Keys.Where(key => key.StartsWith(removeDirSource)).ToList(); 22 | foreach (string s in toBeRemoved) 23 | { 24 | Cache.Remove(s); 25 | } 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Liquesce/Tabs/CurrentShares.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 Tahoma;}{\f1\fnil\fcharset2 Symbol;}} 2 | {\colortbl ;\red255\green0\blue0;} 3 | {\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\lang2057\f0\fs18 The current active 'Mount Points' owned by Liquesce will need to be \cf1\b active\b0 \cf0 for this page to work correctly.\par 4 | \pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-360\li360 Once mounts are working, create shared folder(s) via windows.\par 5 | {\pntext\f1\'B7\tab}Next, Press refresh, and check that the share details shown here are correct.\par 6 | {\pntext\f1\'B7\tab}Once correct, press save in the Service Settings tab. \par 7 | {\pntext\f1\'B7\tab}When Liquesce restarts it will then re-enable these shares.\par 8 | \pard\sa200\sl276\slmult1\lang9\i Note:\line\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-360\li360\sa200\sl276\slmult1 Initial display will be from the last stored Liquesce configuration.\i0\par 9 | } 10 | -------------------------------------------------------------------------------- /LiquesceSvc/LowLevelOSAccess/HGlobal.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Runtime.InteropServices; 3 | using Microsoft.Win32.SafeHandles; 4 | 5 | namespace LiquesceSvc.LowLevelOSAccess 6 | { 7 | /// 8 | /// Stoeln from https://stackoverflow.com/questions/3525932/should-marshal-freehglobal-be-placed-in-a-finally-block-to-ensure-resources-are 9 | /// 10 | /// 11 | /// 12 | /// using (var h = new HGlobal(buffer.Length)) 13 | /// { 14 | /// h.WriteArray(0, buffer, 0, buffer.Length); 15 | /// } 16 | /// 17 | /// 18 | internal class HGlobal : SafeHandleZeroOrMinusOneIsInvalid 19 | { 20 | public HGlobal(int cb) 21 | : base(true) 22 | { 23 | SetHandle(Marshal.AllocHGlobal(cb)); 24 | } 25 | 26 | protected override bool ReleaseHandle() 27 | { 28 | Marshal.FreeHGlobal(handle); 29 | return true; 30 | } 31 | 32 | public static implicit operator IntPtr(HGlobal w) 33 | { 34 | return w.DangerousGetHandle(); 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /LiquesceSvc/LiquesceService.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace LiquesceSvc 2 | { 3 | partial class LiquesceService 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 | components = new System.ComponentModel.Container(); 32 | this.ServiceName = "LiquesceService"; 33 | this.AutoLog = true; 34 | } 35 | 36 | #endregion 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Liquesce/Shared/FlickerFreeRichEditTextBox.cs: -------------------------------------------------------------------------------- 1 | // Taken from 2 | // http://www.c-sharpcorner.com/UploadFile/mgold/ColorSyntaxEditor12012005235814PM/ColorSyntaxEditor.aspx 3 | 4 | using System; 5 | using System.Windows.Forms; 6 | 7 | namespace Shared 8 | { 9 | /// 10 | /// Summary description for FlickerFreeRichEditTextBox - Subclasses the RichTextBox to allow control over flicker 11 | /// 12 | public class FlickerFreeRichEditTextBox : RichTextBox 13 | { 14 | const short WM_PAINT = 0x00f; 15 | public FlickerFreeRichEditTextBox() 16 | { 17 | } 18 | public bool _Paint = true; 19 | protected override void WndProc(ref System.Windows.Forms.Message m) 20 | { 21 | // Code courtesy of Mark Mihevc 22 | // sometimes we want to eat the paint message so we don't have to see all the 23 | // flicker from when we select the text to change the color. 24 | if (m.Msg == WM_PAINT) 25 | { 26 | if (_Paint) 27 | base.WndProc(ref m); // if we decided to paint this control, just call the RichTextBox WndProc 28 | else 29 | m.Result = IntPtr.Zero; // not painting, must set this to IntPtr.Zero if not painting therwise serious problems. 30 | } 31 | else 32 | base.WndProc(ref m); // message other than WM_PAINT, jsut do what you normally do. 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /Liquesce/Tabs/ITab.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2013 Simon Coghlan (Aka Smurf-IV) 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | 27 | using LiquesceFacade; 28 | 29 | namespace Liquesce.Tabs 30 | { 31 | internal interface ITab 32 | { 33 | ConfigDetails cd { set; } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /ThirdParty/CBFSWixCA/targetver.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // The following macros define the minimum required platform. The minimum required platform 4 | // is the earliest version of Windows, Internet Explorer etc. that has the necessary features to run 5 | // your application. The macros work by enabling all features available on platform versions up to and 6 | // including the version specified. 7 | 8 | // Modify the following defines if you have to target a platform prior to the ones specified below. 9 | // Refer to MSDN for the latest info on corresponding values for different platforms. 10 | #ifndef WINVER // Specifies that the minimum required platform is Windows 2000. 11 | #define WINVER 0x0500 // Change this to the appropriate value to target other versions of Windows. 12 | #endif 13 | 14 | #ifndef _WIN32_WINNT // Specifies that the minimum required platform is Windows 2000. 15 | #define _WIN32_WINNT 0x0500 // Change this to the appropriate value to target other versions of Windows. 16 | #endif 17 | 18 | #ifndef _WIN32_IE // Specifies that the minimum required platform is Internet Explorer 5.0. 19 | #define _WIN32_IE 0x0500 // Change this to the appropriate value to target other versions of IE. 20 | #endif 21 | 22 | #ifndef _WIN32_MSI // Specifies that the minimum required MSI version is MSI 3.1 23 | #define _WIN32_MSI 310 // Change this to the appropriate value to target other versions of MSI. 24 | #endif 25 | -------------------------------------------------------------------------------- /LiquesceTray/DoubleProgressBar.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2010-2011 fpDragon 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | using System.Windows.Forms; 27 | 28 | namespace LiquesceTray 29 | { 30 | public partial class DoubleProgressBar : UserControl 31 | { 32 | public DoubleProgressBar() 33 | { 34 | InitializeComponent(); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /LiquesceSvc/ProjectInstaller.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2010-2012 Simon Coghlan (Aka Smurf-IV) 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | 27 | using System.ComponentModel; 28 | using System.Configuration.Install; 29 | 30 | 31 | namespace LiquesceSvc 32 | { 33 | [RunInstaller(true)] 34 | public partial class ProjectInstaller : Installer 35 | { 36 | public ProjectInstaller() 37 | { 38 | InitializeComponent(); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /LiquesceSvc/Salt.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Security.Cryptography; 3 | using System.Text; 4 | 5 | // ReSharper disable CheckNamespace 6 | namespace StringBuffers 7 | // ReSharper restore CheckNamespace 8 | { 9 | /// 10 | /// Simple obfustication to try and stop obvious decompilation, but still use a good algorithm. 11 | /// 12 | static public class StringBuffers 13 | { 14 | // Use some strings that an application will already have in its string list. 15 | private static readonly byte[] key = Encoding.ASCII.GetBytes(@"System.Runtime.CompilerServices "); 16 | private static readonly byte[] iv = Encoding.ASCII.GetBytes(@"FileDescription "); 17 | 18 | public static string ToBuffer(this string text) 19 | { 20 | using (SymmetricAlgorithm algorithm = new RijndaelManaged()) 21 | { 22 | ICryptoTransform transform = algorithm.CreateEncryptor(key, iv); 23 | byte[] inputbuffer = Encoding.Unicode.GetBytes(text); 24 | byte[] outputBuffer = transform.TransformFinalBlock(inputbuffer, 0, inputbuffer.Length); 25 | return Convert.ToBase64String(outputBuffer); 26 | } 27 | } 28 | 29 | public static string FromBuffer(this string text) 30 | { 31 | using (SymmetricAlgorithm algorithm = new RijndaelManaged()) 32 | { 33 | ICryptoTransform transform = algorithm.CreateDecryptor(key, iv); 34 | byte[] inputbuffer = Convert.FromBase64String(text); 35 | byte[] outputBuffer = transform.TransformFinalBlock(inputbuffer, 0, inputbuffer.Length); 36 | return Encoding.Unicode.GetString(outputBuffer); 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Liquesce/ExpectedDetailResult.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2010-2013 Simon Coghlan (Aka Smurf-IV) 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | using System; 27 | 28 | namespace Liquesce 29 | { 30 | class ExpectedDetailResult : IComparable 31 | { 32 | public string DisplayName { get; set; } 33 | public string ActualFileLocation { get; set; } 34 | public int CompareTo(object obj) 35 | { 36 | ExpectedDetailResult other = obj as ExpectedDetailResult; 37 | return (other!= null)?DisplayName.CompareTo(other.DisplayName):0; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Liquesce/DragDropItem.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2010-2012 Simon Coghlan (Aka Smurf-IV) 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | using System; 27 | 28 | namespace Liquesce 29 | { 30 | 31 | [Serializable] 32 | internal class DragDropItem 33 | { 34 | public enum SourceType 35 | { 36 | Drive, 37 | Merge 38 | } 39 | public DragDropItem(string name, SourceType source, bool asReadOnly) 40 | { 41 | Name = name; 42 | Source = source; 43 | AsReadOnly = asReadOnly; 44 | } 45 | 46 | 47 | public string Name { get; private set; } 48 | public SourceType Source { get; private set; } 49 | public bool AsReadOnly { get; private set; } 50 | 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /LiquesceTray/HiddenFormToAcceptCloseMessage.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2010-2012 Simon Coghlan (Aka Smurf-IV) 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | using System; 27 | using System.Windows.Forms; 28 | 29 | namespace LiquesceTray 30 | { 31 | public partial class HiddenFormToAcceptCloseMessage : Form 32 | { 33 | public HiddenFormToAcceptCloseMessage() 34 | { 35 | InitializeComponent(); 36 | } 37 | 38 | private void HiddenFormToAcceptCloseMessage_Load(object sender, EventArgs e) 39 | { 40 | Visible = false; 41 | } 42 | 43 | private void HiddenFormToAcceptCloseMessage_FormClosing(object sender, FormClosingEventArgs e) 44 | { 45 | Application.Exit(); 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /LiquesceTray/TransparentLabel.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2010-2011 fpDragon 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | 27 | using System.Windows.Forms; 28 | 29 | 30 | namespace LiquesceTray 31 | { 32 | public class TransparentLabel : Label 33 | { 34 | public TransparentLabel() 35 | { 36 | SetStyle(ControlStyles.Opaque, true); 37 | SetStyle(ControlStyles.OptimizedDoubleBuffer, false); 38 | } 39 | protected override CreateParams CreateParams 40 | { 41 | get 42 | { 43 | CreateParams parms = base.CreateParams; 44 | parms.ExStyle |= 0x20; // Turn on WS_EX_TRANSPARENT 45 | return parms; 46 | } 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /LiquesceTray/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | True 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /LiquesceTray/app.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /Liquesce/app.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /LiquesceSvc/app.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /LiquesceTrayHelper/app.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /LiquesceFaçade/ILiquesce.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2010-2013 Simon Coghlan (Aka Smurf-IV) 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | 27 | using System; 28 | using System.ServiceModel; 29 | 30 | namespace LiquesceFacade 31 | { 32 | [Serializable] 33 | public enum LiquesceSvcState 34 | { 35 | Unknown, 36 | Running, // Used to indicate that all is well 37 | InError, 38 | InWarning, 39 | Stopped 40 | } 41 | 42 | [ServiceContract] 43 | public interface ILiquesce 44 | { 45 | [OperationContract(IsOneWay = true)] 46 | void Stop(); 47 | 48 | [OperationContract(IsOneWay = true)] 49 | void Start(); 50 | 51 | LiquesceSvcState LiquesceState 52 | { 53 | [OperationContract] 54 | get; 55 | } 56 | 57 | ConfigDetails ConfigDetails 58 | { 59 | [OperationContract] 60 | get; 61 | } 62 | 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /LiquesceFaçade/ILiquesceCallBack.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2010-2012 Simon Coghlan (Aka Smurf-IV) 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | 27 | using System; 28 | using System.Runtime.Serialization; 29 | using System.ServiceModel; 30 | 31 | namespace LiquesceFacade 32 | { 33 | public interface IStateChange 34 | { 35 | [OperationContract(IsOneWay = true)] 36 | void Update(LiquesceSvcState state, string message); 37 | } 38 | 39 | [ServiceContract( CallbackContract = typeof(IStateChange))] 40 | public interface ILiquesceCallBack 41 | { 42 | 43 | [OperationContract(IsOneWay = true)] 44 | void Subscribe(Client id); 45 | 46 | [OperationContract(IsOneWay = true)] 47 | void Unsubscribe(Client id); 48 | } 49 | 50 | // Each client connected to the service has a GUID 51 | [DataContract] 52 | public class Client 53 | { 54 | [DataMember] 55 | public Guid id { get; set; } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /LiquesceTray/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.239 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 LiquesceTray.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | 26 | [global::System.Configuration.UserScopedSettingAttribute()] 27 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 28 | [global::System.Configuration.DefaultSettingValueAttribute("")] 29 | public string WindowLocation { 30 | get { 31 | return ((string)(this["WindowLocation"])); 32 | } 33 | set { 34 | this["WindowLocation"] = value; 35 | } 36 | } 37 | 38 | [global::System.Configuration.UserScopedSettingAttribute()] 39 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 40 | [global::System.Configuration.DefaultSettingValueAttribute("True")] 41 | public bool UpdateRequired { 42 | get { 43 | return ((bool)(this["UpdateRequired"])); 44 | } 45 | set { 46 | this["UpdateRequired"] = value; 47 | } 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /LiquesceSvc/LiquesceCallBackFacade.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2010-2012 Simon Coghlan (Aka Smurf-IV) 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | 27 | 28 | using System.ServiceModel; 29 | using LiquesceFacade; 30 | using NLog; 31 | 32 | namespace LiquesceSvc 33 | { 34 | [ServiceBehavior( 35 | InstanceContextMode = InstanceContextMode.Single, 36 | ConcurrencyMode = ConcurrencyMode.Multiple, 37 | IncludeExceptionDetailInFaults = true 38 | ) 39 | ] 40 | class LiquesceCallBackFacade : ILiquesceCallBack 41 | { 42 | static private readonly Logger Log = LogManager.GetCurrentClassLogger(); 43 | 44 | public LiquesceCallBackFacade() 45 | { 46 | Log.Debug("Object Created"); 47 | } 48 | public void Subscribe(Client id) 49 | { 50 | Log.Debug("Calling Subscribe"); 51 | ManagementLayer.Instance.Subscribe(id); 52 | } 53 | 54 | public void Unsubscribe(Client id) 55 | { 56 | Log.Debug("Calling Unsubscribe"); 57 | ManagementLayer.Instance.Unsubscribe(id); 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /LiquesceSvc/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | <?xml version="1.0" encoding="utf-16"?> 7 | <SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 8 | <ConnectionString>+Od6c3mNYXx4Ix17s1b9iwV7zOHdmMLj7nx+38vjnE36r9YlxR0/cZ6ISo/rez7Czcc4kZw55r/wVYDjNE2vqrjr4/VzgvgW1AgXzvTpLHAfK80RY58QQta1qtXbGgqsTxYJmFHk5ikCd5QFBth1xcJlZ5w62yaScPmWc2ygm58vorqrrTcgq7DIBJpz+YRaQhSKBFdj4IW6ug0OoOyoRkZRaHVTK/BwY2VR4QKRc1eK786/05qM4ABiX3tRrCFb7Ag2G4KleZD0Z2tznzk3ux0gPmLiXU5Hc/T+MEkxiGeQyXnI3Oy40TBgRL6Lv9dJ/TRiYXc32SvrfMgLqcaX0Ks56SfHmBIFLLwwFHRMx2U0HZnESsz2Nid+gJ4ILZDaUatqwAdUaS78rk7eMI3ubXrvA+n5PP3Df1PMI2M0C1LVX/b+OXSdlaVqS9XmMWtBlIh6xJQwlxz8PeargFlltKLroGpVROZJK1z5V5nP48yaaV8rKSb6SPIaybpfPPBy+CEdl57EU5Eh0MGmoWgAtDUQ2ygmEswHR1CyNKT/P7gt9rZDfcjatucd6rpoeY73BphSUQDNZY6MUTYlikg37l5Ob8HTRpI/FYwzSMTzxri4EbYA3reY4p5qNE/GiCmXcsgDaKGhKvz1gYHIugek4dVAaTA0tSqxiuyQtbO6jEz+KpwerYVI+4ir+oay3L1as8n603jeRdXHho7Vq5DsjtsipCEM4f/iq9rKy9sXSUXkOyS66gFktsCYUGxOacfAOeCtXIuIMsjhM8QRZJc+3A==</ConnectionString> 9 | </SerializableConnectionString> 10 | +Od6c3mNYXx4Ix17s1b9iwV7zOHdmMLj7nx+38vjnE36r9YlxR0/cZ6ISo/rez7Czcc4kZw55r/wVYDjNE2vqrjr4/VzgvgW1AgXzvTpLHAfK80RY58QQta1qtXbGgqsTxYJmFHk5ikCd5QFBth1xcJlZ5w62yaScPmWc2ygm58vorqrrTcgq7DIBJpz+YRaQhSKBFdj4IW6ug0OoOyoRkZRaHVTK/BwY2VR4QKRc1eK786/05qM4ABiX3tRrCFb7Ag2G4KleZD0Z2tznzk3ux0gPmLiXU5Hc/T+MEkxiGeQyXnI3Oy40TBgRL6Lv9dJ/TRiYXc32SvrfMgLqcaX0Ks56SfHmBIFLLwwFHRMx2U0HZnESsz2Nid+gJ4ILZDaUatqwAdUaS78rk7eMI3ubXrvA+n5PP3Df1PMI2M0C1LVX/b+OXSdlaVqS9XmMWtBlIh6xJQwlxz8PeargFlltKLroGpVROZJK1z5V5nP48yaaV8rKSb6SPIaybpfPPBy+CEdl57EU5Eh0MGmoWgAtDUQ2ygmEswHR1CyNKT/P7gt9rZDfcjatucd6rpoeY73BphSUQDNZY6MUTYlikg37l5Ob8HTRpI/FYwzSMTzxri4EbYA3reY4p5qNE/GiCmXcsgDaKGhKvz1gYHIugek4dVAaTA0tSqxiuyQtbO6jEz+KpwerYVI+4ir+oay3L1as8n603jeRdXHho7Vq5DsjtsipCEM4f/iq9rKy9sXSUXkOyS66gFktsCYUGxOacfAOeCtXIuIMsjhM8QRZJc+3A== 11 | 12 | 13 | -------------------------------------------------------------------------------- /LiquesceSvc/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.18408 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 LiquesceSvc.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | 26 | [global::System.Configuration.ApplicationScopedSettingAttribute()] 27 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 28 | [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)] 29 | [global::System.Configuration.DefaultSettingValueAttribute(@"+Od6c3mNYXx4Ix17s1b9iwV7zOHdmMLj7nx+38vjnE36r9YlxR0/cZ6ISo/rez7Czcc4kZw55r/wVYDjNE2vqrjr4/VzgvgW1AgXzvTpLHAfK80RY58QQta1qtXbGgqsTxYJmFHk5ikCd5QFBth1xcJlZ5w62yaScPmWc2ygm58vorqrrTcgq7DIBJpz+YRaQhSKBFdj4IW6ug0OoOyoRkZRaHVTK/BwY2VR4QKRc1eK786/05qM4ABiX3tRrCFb7Ag2G4KleZD0Z2tznzk3ux0gPmLiXU5Hc/T+MEkxiGeQyXnI3Oy40TBgRL6Lv9dJ/TRiYXc32SvrfMgLqcaX0Ks56SfHmBIFLLwwFHRMx2U0HZnESsz2Nid+gJ4ILZDaUatqwAdUaS78rk7eMI3ubXrvA+n5PP3Df1PMI2M0C1LVX/b+OXSdlaVqS9XmMWtBlIh6xJQwlxz8PeargFlltKLroGpVROZJK1z5V5nP48yaaV8rKSb6SPIaybpfPPBy+CEdl57EU5Eh0MGmoWgAtDUQ2ygmEswHR1CyNKT/P7gt9rZDfcjatucd6rpoeY73BphSUQDNZY6MUTYlikg37l5Ob8HTRpI/FYwzSMTzxri4EbYA3reY4p5qNE/GiCmXcsgDaKGhKvz1gYHIugek4dVAaTA0tSqxiuyQtbO6jEz+KpwerYVI+4ir+oay3L1as8n603jeRdXHho7Vq5DsjtsipCEM4f/iq9rKy9sXSUXkOyS66gFktsCYUGxOacfAOeCtXIuIMsjhM8QRZJc+3A==")] 30 | public string Salt { 31 | get { 32 | return ((string)(this["Salt"])); 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /LiquesceSvc/ProjectInstaller.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace LiquesceSvc 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 | // 40 | // serviceInstaller1 41 | // 42 | this.serviceInstaller1.Description = "LiquesceSvc - Pools Physcical storage locations into a single entity"; 43 | this.serviceInstaller1.DisplayName = "Liquesce Service"; 44 | this.serviceInstaller1.ServiceName = "LiquesceSvc"; 45 | this.serviceInstaller1.ServicesDependedOn = new string[] { 46 | "PlugPlay"}; 47 | this.serviceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic; 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 | } -------------------------------------------------------------------------------- /LiquesceTray/HiddenFormToAcceptCloseMessage.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace LiquesceTray 2 | { 3 | partial class HiddenFormToAcceptCloseMessage 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 Windows Form 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 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HiddenFormToAcceptCloseMessage)); 32 | this.SuspendLayout(); 33 | // 34 | // HiddenFormToAcceptCloseMessage 35 | // 36 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 37 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 38 | this.ClientSize = new System.Drawing.Size(140, 52); 39 | this.ControlBox = false; 40 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; 41 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 42 | this.MaximizeBox = false; 43 | this.MaximumSize = new System.Drawing.Size(146, 74); 44 | this.MinimizeBox = false; 45 | this.Name = "HiddenFormToAcceptCloseMessage"; 46 | this.ShowIcon = false; 47 | this.ShowInTaskbar = false; 48 | this.Text = "HiddenFormToAcceptCloseMessage"; 49 | this.WindowState = System.Windows.Forms.FormWindowState.Minimized; 50 | this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.HiddenFormToAcceptCloseMessage_FormClosing); 51 | this.Load += new System.EventHandler(this.HiddenFormToAcceptCloseMessage_Load); 52 | this.ResumeLayout(false); 53 | 54 | } 55 | 56 | #endregion 57 | } 58 | } -------------------------------------------------------------------------------- /Liquesce/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | True 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | True 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /Liquesce/Tabs/Welcome.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg1252\deff0\deflang2057{\fonttbl{\f0\fnil\fcharset0 Tahoma;}{\f1\fnil\fcharset2 Symbol;}} 2 | {\colortbl ;\red0\green0\blue255;} 3 | {\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\ul\b\f0\fs24 Welcome.\ulnone\b0\fs18\par 4 | \fs20 This is the management application for the \i Liquesce Phase \fs22 ][\fs20 Suite\i0 . It allows you to take your hard disks (internal or external) and make them appear as single large drive.\par 5 | \par 6 | \ul\b Performance Tip:\ulnone\b0\par 7 | Please ensure that for \i any \i0 mounted drive letter \i or \i0 folder that is created via Liquesce, is \i not \i0 protected by an Anti-Virus apllication.\par 8 | This is because 'It' (the AV) will see all file actions (opens, closes, queries, etc.) on both the source \b AND \b0 the new mount point, and will seriously impact your performance.\par 9 | \b\par 10 | \ul Debug Tips:\b0\par 11 | \pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-360\li720\ulnone Stop the service\par 12 | {\pntext\f1\'B7\tab}Delete the Svc logs\par 13 | {\pntext\f1\'B7\tab}Adjust your logging to Trace,\par 14 | {\pntext\f1\'B7\tab}Drop the threads down to 1, \par 15 | {\pntext\f1\'B7\tab}Start the service\par 16 | {\pntext\f1\'B7\tab}Perform the actions that cause a problem. e.g.\par 17 | \pard{\pntext\f0 i.\tab}{\*\pn\pnlvlbody\pnf0\pnindent0\pnstart1\pnlcrm{\pntxta.}} 18 | \fi-360\li1080 Use wordpad to open a file on the mounted drive (Make new if you can)\par 19 | {\pntext\f0 ii.\tab}Make some edits\par 20 | \pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-360\li720 Make a note of the time (UTC/GMT).\par 21 | {\pntext\f1\'B7\tab}Stop the service and zip them up \fs18\par 22 | \pard{\pntext\f0 i.\tab}{\*\pn\pnlvlbody\pnf0\pnindent0\pnstart1\pnlcrm{\pntxta.}} 23 | \fi-360\li1080\fs20 Use the "Zip Logs" button in the Logging tab,\fs18\par 24 | \fs20{\pntext\f0 ii.\tab}Create a new issue here: {\field{\*\fldinst{HYPERLINK "https://liquesce.codeplex.com/workitem/list/basic"}}{\fldrslt{\ul\cf1 https://liquesce.codeplex.com/workitem/list/basic}}}\f0\fs20 . \lang9\fs22\par 25 | \lang2057\fs20{\pntext\f0 iii.\tab}With the notes of how and when, fill in the details and attach the log(s)\lang9\fs22\par 26 | \pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-360\li360\lang2057\fs20 If the actions can be done via clicking things, then use PSR (Problem Steps Recorder) {\field{\*\fldinst{HYPERLINK "http://www.msigeek.com/2410/problem-step-recorder-an-amazing-screen-capture-tool"}}{\fldrslt{\ul\cf1 http://www.msigeek.com/2410/problem-step-recorder-an-amazing-screen-capture-tool}}}\lang9\f0\fs22\par 27 | } 28 | -------------------------------------------------------------------------------- /Liquesce/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.18408 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 Liquesce.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | 26 | [global::System.Configuration.UserScopedSettingAttribute()] 27 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 28 | [global::System.Configuration.DefaultSettingValueAttribute("")] 29 | public string WindowLocation { 30 | get { 31 | return ((string)(this["WindowLocation"])); 32 | } 33 | set { 34 | this["WindowLocation"] = value; 35 | } 36 | } 37 | 38 | [global::System.Configuration.UserScopedSettingAttribute()] 39 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 40 | [global::System.Configuration.DefaultSettingValueAttribute("True")] 41 | public bool UpdateRequired { 42 | get { 43 | return ((bool)(this["UpdateRequired"])); 44 | } 45 | set { 46 | this["UpdateRequired"] = value; 47 | } 48 | } 49 | 50 | [global::System.Configuration.UserScopedSettingAttribute()] 51 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 52 | [global::System.Configuration.DefaultSettingValueAttribute("")] 53 | public string TailWindowLocation { 54 | get { 55 | return ((string)(this["TailWindowLocation"])); 56 | } 57 | set { 58 | this["TailWindowLocation"] = value; 59 | } 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /LiquesceFaçade/LiquesceProxy.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2010-2013 Simon Coghlan (Aka Smurf-IV) 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | 27 | using System.ServiceModel; 28 | 29 | namespace LiquesceFacade 30 | { 31 | public class LiquesceProxy : ClientBase, ILiquesce 32 | { 33 | public LiquesceProxy() 34 | { 35 | } 36 | 37 | public LiquesceProxy(string endpointConfigurationName) 38 | : base(endpointConfigurationName) 39 | { 40 | } 41 | 42 | public LiquesceProxy(string endpointConfigurationName, string remoteAddress) 43 | : base(endpointConfigurationName, remoteAddress) 44 | { 45 | } 46 | 47 | public LiquesceProxy(string endpointConfigurationName, EndpointAddress remoteAddress) 48 | : base(endpointConfigurationName, remoteAddress) 49 | { 50 | } 51 | 52 | public LiquesceProxy(System.ServiceModel.Channels.Binding binding, EndpointAddress remoteAddress) 53 | : base(binding, remoteAddress) 54 | { 55 | } 56 | 57 | #region Implementation of ILiquesce 58 | 59 | public void Stop() 60 | { 61 | base.Channel.Stop(); 62 | } 63 | 64 | public void Start() 65 | { 66 | base.Channel.Start(); 67 | } 68 | 69 | public LiquesceSvcState LiquesceState 70 | { 71 | get { return base.Channel.LiquesceState; } 72 | } 73 | 74 | public ConfigDetails ConfigDetails 75 | { 76 | get { return base.Channel.ConfigDetails; } 77 | } 78 | 79 | #endregion 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /ThirdParty/CBFSWixCA/CBFSInstWrapper.cpp: -------------------------------------------------------------------------------- 1 | #include "StdAfx.h" 2 | #include "CBFSInstWrapper.h" 3 | 4 | // explicit 5 | CBFSInstWrapper::CBFSInstWrapper(LPCTSTR const cpszDllName) 6 | : CDLLWrapper( cpszDllName ) 7 | ,m_lpfnInstall( NULL ) 8 | ,m_lpfnUninstall( NULL ) 9 | ,m_lpfnGetModuleStatus( NULL ) 10 | ,m_lpfnInstallIcon( NULL ) 11 | ,m_lpfnUninstallIcon( NULL ) 12 | { 13 | } 14 | 15 | //virtual 16 | CBFSInstWrapper::~CBFSInstWrapper() 17 | { 18 | } 19 | 20 | // The call to 'is valid' will attempt to load all the wanted function pointers 21 | // and then check if we had an error. 22 | //virtual 23 | const bool CBFSInstWrapper::IsValid(void) 24 | { 25 | return( GetFunctionPointer( m_lpfnInstall, STR( Install) ) 26 | && GetFunctionPointer( m_lpfnUninstall, STR( Uninstall ) ) 27 | && GetFunctionPointer( m_lpfnGetModuleStatus, STR( GetModuleStatus ) ) 28 | && GetFunctionPointer( m_lpfnInstallIcon, STR( InstallIcon ) ) 29 | && GetFunctionPointer( m_lpfnUninstallIcon, STR( UninstallIcon ) ) 30 | && CDLLWrapper::IsValid() 31 | ); 32 | } 33 | 34 | BOOL CBFSInstWrapper::Install( IN LPCTSTR CabPathName, IN LPCTSTR ProductName, IN LPCTSTR PathToInstall, IN BOOL SupportPnP, IN DWORD ModulesToInstall, OUT LPDWORD RebootNeeded ) 35 | { 36 | if ( NULL == m_lpfnInstall ) 37 | return( FALSE ); 38 | else 39 | return( m_lpfnInstall( CabPathName, ProductName, PathToInstall, SupportPnP, ModulesToInstall, RebootNeeded ) ); 40 | } 41 | 42 | BOOL CBFSInstWrapper::Uninstall( IN LPCTSTR CabPathName, IN LPCTSTR ProductName, IN LPCTSTR InstalledPath, OUT LPDWORD RebootNeeded ) 43 | { 44 | if ( NULL == m_lpfnUninstall ) 45 | return( FALSE ); 46 | else 47 | return( m_lpfnUninstall( CabPathName, ProductName, InstalledPath, RebootNeeded ) ); 48 | } 49 | 50 | BOOL CBFSInstWrapper::GetModuleStatus( IN LPCTSTR ProductName, IN DWORD Module, OUT LPBOOL Installed, OUT LPDWORD FileVersionHigh OPTIONAL, OUT LPDWORD FileVersionLow OPTIONAL ) 51 | { 52 | if ( NULL == m_lpfnGetModuleStatus ) 53 | return( FALSE ); 54 | else 55 | return( m_lpfnGetModuleStatus( ProductName, Module, Installed, FileVersionHigh, FileVersionLow ) ); 56 | } 57 | 58 | BOOL CBFSInstWrapper::InstallIcon( IN LPCTSTR ProductName, IN LPCTSTR IconPath, IN LPCTSTR IconId, OUT LPBOOL RebootNeeded ) 59 | { 60 | if ( NULL == m_lpfnInstallIcon ) 61 | return( FALSE ); 62 | else 63 | return( m_lpfnInstallIcon( ProductName, IconPath, IconId, RebootNeeded ) ); 64 | } 65 | 66 | BOOL CBFSInstWrapper::UninstallIcon( IN LPCTSTR ProductName, IN LPCTSTR IconId, OUT LPBOOL RebootNeeded ) 67 | { 68 | if ( NULL == m_lpfnUninstallIcon ) 69 | return( FALSE ); 70 | else 71 | return( m_lpfnUninstallIcon( ProductName, IconId, RebootNeeded ) ); 72 | } 73 | -------------------------------------------------------------------------------- /Liquesce/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2010-2012 Simon Coghlan (Aka Smurf-IV) 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | 27 | using System.Reflection; 28 | using System.Runtime.InteropServices; 29 | 30 | // General Information about an assembly is controlled through the following 31 | // set of attributes. Change these attribute values to modify the information 32 | // associated with an assembly. 33 | [assembly: AssemblyTitle("Liquesce")] 34 | [assembly: AssemblyDescription("")] 35 | [assembly: AssemblyConfiguration("")] 36 | [assembly: AssemblyCompany("Smurf-IV")] 37 | [assembly: AssemblyProduct("Liquesce")] 38 | [assembly: AssemblyCopyright("Copyright © Simon Coghlan (Aka Smurf-IV) 2010 - 2012")] 39 | [assembly: AssemblyTrademark("")] 40 | [assembly: AssemblyCulture("")] 41 | 42 | // Setting ComVisible to false makes the types in this assembly not visible 43 | // to COM components. If you need to access a type in this assembly from 44 | // COM, set the ComVisible attribute to true on that type. 45 | [assembly: ComVisible(false)] 46 | 47 | // The following GUID is for the ID of the typelib if this project is exposed to COM 48 | [assembly: Guid("3feec58f-ab7b-402f-b78f-5e5aefee7f6d")] 49 | 50 | // Version information for an assembly consists of the following four values: 51 | // 52 | // Major Version 53 | // Minor Version 54 | // Build Number 55 | // Revision 56 | // 57 | // You can specify all the values or you can default the Build and Revision Numbers 58 | // by using the '*' as shown below: 59 | // [assembly: AssemblyVersion("1.0.*")] 60 | [assembly: AssemblyVersion("14.8.1242.19")] 61 | [assembly: AssemblyFileVersion("14.8.1242.19")] 62 | -------------------------------------------------------------------------------- /LiquesceSvc/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2010-2012 Simon Coghlan (Aka Smurf-IV) 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | using System.Reflection; 27 | using System.Runtime.InteropServices; 28 | 29 | // General Information about an assembly is controlled through the following 30 | // set of attributes. Change these attribute values to modify the information 31 | // associated with an assembly. 32 | [assembly: AssemblyTitle("LiquesceSvc")] 33 | [assembly: AssemblyDescription("")] 34 | [assembly: AssemblyConfiguration("")] 35 | [assembly: AssemblyCompany("Smurf-IV")] 36 | [assembly: AssemblyProduct("LiquesceSvc")] 37 | [assembly: AssemblyCopyright("Copyright © Simon Coghlan (Aka Smurf-IV) 2010 - 11")] 38 | [assembly: AssemblyTrademark("")] 39 | [assembly: AssemblyCulture("")] 40 | 41 | // Setting ComVisible to false makes the types in this assembly not visible 42 | // to COM components. If you need to access a type in this assembly from 43 | // COM, set the ComVisible attribute to true on that type. 44 | [assembly: ComVisible(false)] 45 | 46 | // The following GUID is for the ID of the typelib if this project is exposed to COM 47 | [assembly: Guid("f58ce85d-120a-4d4e-bde1-8e52ebd50b95")] 48 | 49 | // Version information for an assembly consists of the following four values: 50 | // 51 | // Major Version 52 | // Minor Version 53 | // Build Number 54 | // Revision 55 | // 56 | // You can specify all the values or you can default the Build and Revision Numbers 57 | // by using the '*' as shown below: 58 | // [assembly: AssemblyVersion("1.0.*")] 59 | [assembly: AssemblyVersion("14.9.2281.3")] 60 | [assembly: AssemblyFileVersion("14.9.2281.3")] 61 | -------------------------------------------------------------------------------- /LiquesceTray/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2010-2012 Simon Coghlan (Aka Smurf-IV) 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | using System.Reflection; 27 | using System.Runtime.InteropServices; 28 | 29 | // General Information about an assembly is controlled through the following 30 | // set of attributes. Change these attribute values to modify the information 31 | // associated with an assembly. 32 | [assembly: AssemblyTitle("LiquesceTray")] 33 | [assembly: AssemblyDescription("")] 34 | [assembly: AssemblyConfiguration("")] 35 | [assembly: AssemblyCompany("Smurf-IV")] 36 | [assembly: AssemblyProduct("Liquesce")] 37 | [assembly: AssemblyCopyright("Copyright © Simon Coghlan (Aka Smurf-IV) 2010 - 11")] 38 | [assembly: AssemblyTrademark("")] 39 | [assembly: AssemblyCulture("")] 40 | 41 | // Setting ComVisible to false makes the types in this assembly not visible 42 | // to COM components. If you need to access a type in this assembly from 43 | // COM, set the ComVisible attribute to true on that type. 44 | [assembly: ComVisible(false)] 45 | 46 | // The following GUID is for the ID of the typelib if this project is exposed to COM 47 | [assembly: Guid("ff8451a1-4f61-442b-b1d3-16dba1489e24")] 48 | 49 | // Version information for an assembly consists of the following four values: 50 | // 51 | // Major Version 52 | // Minor Version 53 | // Build Number 54 | // Revision 55 | // 56 | // You can specify all the values or you can default the Build and Revision Numbers 57 | // by using the '*' as shown below: 58 | // [assembly: AssemblyVersion("1.0.*")] 59 | [assembly: AssemblyVersion("14.8.1004.18")] 60 | [assembly: AssemblyFileVersion("14.8.1004.18")] 61 | -------------------------------------------------------------------------------- /LiquesceFaçade/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2010-2012 Simon Coghlan (Aka Smurf-IV) 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | 27 | using System.Reflection; 28 | using System.Runtime.InteropServices; 29 | 30 | // General Information about an assembly is controlled through the following 31 | // set of attributes. Change these attribute values to modify the information 32 | // associated with an assembly. 33 | [assembly: AssemblyTitle("LiquesceFacade")] 34 | [assembly: AssemblyDescription("")] 35 | [assembly: AssemblyConfiguration("")] 36 | [assembly: AssemblyCompany("Smurf-IV")] 37 | [assembly: AssemblyProduct("LiquesceFacade")] 38 | [assembly: AssemblyCopyright("Copyright © Simon Coghlan (Aka Smurf-IV) 2010 - 11")] 39 | [assembly: AssemblyTrademark("")] 40 | [assembly: AssemblyCulture("")] 41 | 42 | // Setting ComVisible to false makes the types in this assembly not visible 43 | // to COM components. If you need to access a type in this assembly from 44 | // COM, set the ComVisible attribute to true on that type. 45 | [assembly: ComVisible(false)] 46 | 47 | // The following GUID is for the ID of the typelib if this project is exposed to COM 48 | [assembly: Guid("0add1bfe-80d9-460b-ab4f-1db837df49b3")] 49 | 50 | // Version information for an assembly consists of the following four values: 51 | // 52 | // Major Version 53 | // Minor Version 54 | // Build Number 55 | // Revision 56 | // 57 | // You can specify all the values or you can default the Build and Revision Numbers 58 | // by using the '*' as shown below: 59 | // [assembly: AssemblyVersion("1.0.*")] 60 | [assembly: AssemblyVersion("14.8.856.18")] 61 | [assembly: AssemblyFileVersion("14.8.856.18")] 62 | -------------------------------------------------------------------------------- /LiquesceTrayHelper/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2010-2012 Simon Coghlan (Aka Smurf-IV) 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | 27 | using System.Reflection; 28 | using System.Runtime.InteropServices; 29 | 30 | // General Information about an assembly is controlled through the following 31 | // set of attributes. Change these attribute values to modify the information 32 | // associated with an assembly. 33 | [assembly: AssemblyTitle("LiquesceTrayHelper")] 34 | [assembly: AssemblyDescription("")] 35 | [assembly: AssemblyConfiguration("")] 36 | [assembly: AssemblyCompany("Smurf-IV")] 37 | [assembly: AssemblyProduct("LiquesceTrayHelper")] 38 | [assembly: AssemblyCopyright("Copyright © Simon Coghlan (Aka Smurf-IV) 2011-2012")] 39 | [assembly: AssemblyTrademark("")] 40 | [assembly: AssemblyCulture("")] 41 | 42 | // Setting ComVisible to false makes the types in this assembly not visible 43 | // to COM components. If you need to access a type in this assembly from 44 | // COM, set the ComVisible attribute to true on that type. 45 | [assembly: ComVisible(false)] 46 | 47 | // The following GUID is for the ID of the typelib if this project is exposed to COM 48 | [assembly: Guid("820c82d3-6e5d-4e06-9838-e8b449d8e774")] 49 | 50 | // Version information for an assembly consists of the following four values: 51 | // 52 | // Major Version 53 | // Minor Version 54 | // Build Number 55 | // Revision 56 | // 57 | // You can specify all the values or you can default the Build and Revision Numbers 58 | // by using the '*' as shown below: 59 | // [assembly: AssemblyVersion("1.0.*")] 60 | [assembly: AssemblyVersion("14.8.993.18")] 61 | [assembly: AssemblyFileVersion("14.8.993.18")] 62 | -------------------------------------------------------------------------------- /LiquesceFaçade/Utils.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2010-2013 Simon Coghlan (Aka Smurf-IV) 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | 27 | using System; 28 | using System.Windows.Forms; 29 | 30 | namespace LiquesceFacade 31 | { 32 | public static class Utils 33 | { 34 | public static void ResizeDescriptionArea(ref PropertyGrid grid, int nNumLines) 35 | { 36 | try 37 | { 38 | System.Reflection.PropertyInfo pi = grid.GetType().GetProperty("Controls"); 39 | Control.ControlCollection cc = (Control.ControlCollection)pi.GetValue(grid, null); 40 | 41 | foreach (Control c in cc) 42 | { 43 | Type ct = c.GetType(); 44 | string sName = ct.Name; 45 | 46 | if (sName == "DocComment") 47 | { 48 | pi = ct.GetProperty("Lines"); 49 | if (pi != null) 50 | { 51 | #pragma warning disable 168 52 | int i = (int)pi.GetValue(c, null); 53 | #pragma warning restore 168 54 | pi.SetValue(c, nNumLines, null); 55 | } 56 | 57 | if (ct.BaseType != null) 58 | { 59 | System.Reflection.FieldInfo fi = ct.BaseType.GetField("userSized", 60 | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); 61 | 62 | if (fi != null) 63 | fi.SetValue(c, true); 64 | } 65 | break; 66 | } 67 | } 68 | } 69 | catch 70 | { 71 | } 72 | } 73 | 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /LiquesceSvc/LiquesceFacade.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2010-2012 Simon Coghlan (Aka Smurf-IV) 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | 27 | 28 | using System.ServiceModel; 29 | using System.Threading; 30 | using LiquesceFacade; 31 | using NLog; 32 | 33 | namespace LiquesceSvc 34 | { 35 | [ServiceBehavior( 36 | InstanceContextMode = InstanceContextMode.Single, 37 | ConcurrencyMode = ConcurrencyMode.Multiple, 38 | IncludeExceptionDetailInFaults = true 39 | ) 40 | ] 41 | public class LiquesceFacade : ILiquesce 42 | { 43 | static private readonly Logger Log = LogManager.GetCurrentClassLogger(); 44 | 45 | public LiquesceFacade() 46 | { 47 | Log.Debug("Object Created"); 48 | } 49 | 50 | public void Stop() 51 | { 52 | Log.Debug("Calling Stop"); 53 | ManagementLayer.Instance.Stop(); 54 | } 55 | 56 | public void Start() 57 | { 58 | Log.Debug("Calling Start"); 59 | // Queue the main work as a thread pool task as we want this method to finish promptly. 60 | ThreadPool.QueueUserWorkItem(ManagementLayer.Instance.Start); 61 | } 62 | 63 | public LiquesceSvcState LiquesceState 64 | { 65 | get 66 | { 67 | Log.Debug("Calling State"); 68 | return ManagementLayer.Instance.State; 69 | } 70 | } 71 | 72 | public ConfigDetails ConfigDetails 73 | { 74 | get 75 | { 76 | Log.Debug("Calling get_ConfigDetails"); 77 | return ManagementLayer.Instance.CurrentConfigDetails; 78 | } 79 | set 80 | { 81 | Log.Debug("Calling set_ConfigDetails"); 82 | ManagementLayer.Instance.CurrentConfigDetails = value; 83 | } 84 | } 85 | 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /ThirdParty/CBFSWixCA/ExtractUtils.cpp: -------------------------------------------------------------------------------- 1 | #include "StdAfx.h" 2 | #include "ExtractUtils.h" 3 | 4 | 5 | CExtractUtils::CExtractUtils(const HINSTANCE hInstance, const WORD & resourceID) 6 | : m_hInstance( hInstance ) 7 | , m_wResourceID( resourceID ) 8 | // , m_szOutputFilename() 9 | { 10 | m_szOutputFilename[0] = NULL; 11 | } 12 | 13 | // virtual 14 | CExtractUtils::~CExtractUtils() 15 | { 16 | // TODO: owner application will need to delete the file once it has finished with it (i.e. not when this class loses scope) 17 | //if ( m_szOutputFilename[0] != NULL ) 18 | // RemoveResource(); 19 | } 20 | 21 | 22 | // 23 | bool CExtractUtils::ExtractResource() 24 | { 25 | bool bSuccess = CreateTempFile(); 26 | if ( bSuccess ) 27 | try 28 | { 29 | // First find and load the required resource 30 | HRSRC hResource = FindResource(m_hInstance, MAKEINTRESOURCE(m_wResourceID), TEXT("BIN")); 31 | HGLOBAL hFileResource = LoadResource(m_hInstance, hResource); 32 | 33 | // Now open and map this to a disk file 34 | LPBYTE lpFileData = (LPBYTE)LockResource(hFileResource); 35 | CONST DWORD cdwSize( SizeofResource(m_hInstance, hResource)); 36 | 37 | // Open the file and filemap 38 | HANDLE hFile = CreateFile(m_szOutputFilename, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 39 | HANDLE hFilemap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, cdwSize, NULL); 40 | LPBYTE lpBaseAddress = (LPBYTE )MapViewOfFile(hFilemap, FILE_MAP_WRITE, 0, 0, 0); 41 | 42 | // Write the file 43 | CopyMemory(lpBaseAddress, lpFileData, cdwSize); 44 | 45 | // Unmap the file and close the handles 46 | UnmapViewOfFile(lpBaseAddress); 47 | 48 | CloseHandle(hFilemap); 49 | CloseHandle(hFile); 50 | bSuccess = true; 51 | } 52 | catch(...) 53 | { 54 | // Ignore all type of errors 55 | m_szOutputFilename[0] = NULL; 56 | bSuccess = false; 57 | } 58 | return bSuccess; 59 | } 60 | 61 | 62 | 63 | 64 | bool CExtractUtils::CreateTempFile( ) 65 | { 66 | bool bSuccess = false; 67 | try 68 | { 69 | TCHAR lpTempPathBuffer[MAX_PATH]; 70 | // Gets the temp path env string (no guarantee it's a valid path). 71 | DWORD dwRetVal = GetTempPath(MAX_PATH, // length of the buffer 72 | lpTempPathBuffer); // buffer for path 73 | if ( (dwRetVal > (MAX_PATH-14)) 74 | || (dwRetVal == 0) 75 | ) 76 | { 77 | } 78 | else 79 | { 80 | // Generates a temporary file name. 81 | UINT uRetVal = GetTempFileName(lpTempPathBuffer, // directory for tmp files 82 | TEXT("Extract"), // temp file name prefix 83 | 0, // create unique name 84 | m_szOutputFilename); // buffer for name 85 | bSuccess = (uRetVal != 0); 86 | } 87 | } 88 | catch(...) 89 | { 90 | // Ignore all type of errors 91 | bSuccess = false; 92 | } 93 | return bSuccess; 94 | } 95 | -------------------------------------------------------------------------------- /ThirdParty/CBFSWixCA/CBFS Installer/cbfsinst.h: -------------------------------------------------------------------------------- 1 | // The following ifdef block is the standard way of creating macros which make exporting 2 | // from a DLL simpler. All files within this DLL are compiled with the CBFSISTALL_EXPORTS 3 | // symbol defined on the command line. this symbol should not be defined on any project 4 | // that uses this DLL. This way any other project whose source files include this file see 5 | // CBFSISTALL_API functions as being imported from a DLL, whereas this DLL sees symbols 6 | // defined with this macro as being exported. 7 | #ifdef CBFSINST_EXPORTS 8 | #ifdef __cplusplus 9 | #define CBFSINST_API extern "C" __declspec(dllexport) 10 | #else 11 | #define CBFSINST_API __declspec(dllexport) 12 | #endif 13 | #else 14 | #define CBFSINST_API __declspec(dllimport) 15 | #endif 16 | 17 | #define CBFS_MODULE_PNP_BUS 0x00000001 18 | #define CBFS_MODULE_DRIVER 0x00000002 19 | #define CBFS_MODULE_NET_REDIRECTOR_DLL 0x00010000 20 | #define CBFS_MODULE_MOUNT_NOTIFIER_DLL 0x00020000 21 | 22 | CBFSINST_API BOOL __stdcall InstallA( 23 | IN LPCSTR CabPathName, 24 | IN LPCSTR ProductName, 25 | IN LPCSTR PathToInstall, 26 | IN BOOL SupportPnP, 27 | IN DWORD ModulesToInstall, 28 | OUT LPDWORD RebootNeeded 29 | ); 30 | 31 | CBFSINST_API BOOL __stdcall InstallW( 32 | IN LPCWSTR CabPathName, 33 | IN LPCWSTR ProductName, 34 | IN LPCWSTR PathToInstall, 35 | IN BOOL SupportPnP, 36 | IN DWORD ModulesToInstall, 37 | OUT LPDWORD RebootNeeded 38 | ); 39 | 40 | CBFSINST_API BOOL __stdcall UninstallA( 41 | IN LPCSTR CabPathName, 42 | IN LPCSTR ProductName, 43 | IN LPCSTR InstalledPath OPTIONAL, 44 | OUT LPDWORD RebootNeeded 45 | ); 46 | 47 | CBFSINST_API BOOL __stdcall UninstallW( 48 | IN LPCWSTR CabPathName, 49 | IN LPCWSTR ProductName, 50 | IN LPCWSTR InstalledPath OPTIONAL, 51 | OUT LPDWORD RebootNeeded 52 | ); 53 | 54 | CBFSINST_API BOOL __stdcall GetModuleStatusA( 55 | IN LPCSTR ProductName, 56 | IN DWORD Module, 57 | OUT LPBOOL Installed, 58 | OUT LPDWORD FileVersionHigh OPTIONAL, 59 | OUT LPDWORD FileVersionLow OPTIONAL 60 | ); 61 | 62 | CBFSINST_API BOOL __stdcall GetModuleStatusW( 63 | IN LPCWSTR ProductName, 64 | IN DWORD Module, 65 | OUT LPBOOL Installed, 66 | OUT LPDWORD FileVersionHigh OPTIONAL, 67 | OUT LPDWORD FileVersionLow OPTIONAL 68 | ); 69 | 70 | CBFSINST_API BOOL __stdcall InstallIconA( 71 | IN LPCSTR ProductName, 72 | IN LPCSTR IconPath, 73 | IN LPCSTR IconId, 74 | OUT LPBOOL RebootNeeded 75 | ); 76 | 77 | CBFSINST_API BOOL __stdcall InstallIconW( 78 | IN LPCWSTR ProductName, 79 | IN LPCWSTR IconPath, 80 | IN LPCWSTR IconId, 81 | OUT LPBOOL RebootNeeded 82 | ); 83 | 84 | CBFSINST_API BOOL __stdcall UninstallIconA( 85 | IN LPCSTR ProductName, 86 | IN LPCSTR IconId, 87 | OUT LPBOOL RebootNeeded 88 | ); 89 | 90 | CBFSINST_API BOOL __stdcall UninstallIconW( 91 | IN LPCWSTR ProductName, 92 | IN LPCWSTR IconId, 93 | OUT LPBOOL RebootNeeded 94 | ); 95 | -------------------------------------------------------------------------------- /ThirdParty/CBFSWixCA/CBFSWixCA.vcxproj.filters: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav 15 | 16 | 17 | {85dfb99b-af8a-4182-bd1e-bdd8f4fa2e4e} 18 | 19 | 20 | {206e6a82-cb25-441d-9422-5557cfa6e78a} 21 | 22 | 23 | {0b80d71b-d54f-403b-ac0c-2d63897a8560} 24 | 25 | 26 | 27 | 28 | Source Files 29 | 30 | 31 | Source Files 32 | 33 | 34 | Source Files 35 | 36 | 37 | Source Files 38 | 39 | 40 | Source Files 41 | 42 | 43 | 44 | 45 | Source Files 46 | 47 | 48 | Resource Files\CBFS Installer\Driver 49 | 50 | 51 | Resource Files\CBFS Installer\x86 52 | 53 | 54 | 55 | 56 | Header Files 57 | 58 | 59 | Header Files 60 | 61 | 62 | Resource Files\CBFS Installer 63 | 64 | 65 | Header Files 66 | 67 | 68 | Header Files 69 | 70 | 71 | Resource Files 72 | 73 | 74 | 75 | 76 | Resource Files 77 | 78 | 79 | -------------------------------------------------------------------------------- /Liquesce/LogDisplay.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | 3 | // --------------------------------------------------------------------------------------------------------------- 4 | // 5 | // 6 | // Copyright (C) 2010-2013 Simon Coghlan (Aka Smurf-IV) 7 | // 8 | // This program is free software: you can redistribute it and/or modify 9 | // it under the terms of the GNU General Public License as published by 10 | // the Free Software Foundation, either version 2 of the License, or 11 | // any later version. 12 | // 13 | // This program is distributed in the hope that it will be useful, 14 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | // GNU General Public License for more details. 17 | // 18 | // You should have received a copy of the GNU General Public License 19 | // along with this program. If not, see http://www.gnu.org/licenses/. 20 | // 21 | // 22 | // Url: http://Liquesce.codeplex.com/ 23 | // Email: http://www.codeplex.com/site/users/view/smurfiv 24 | // 25 | // -------------------------------------------------------------------------------------------------------------------- 26 | 27 | #endregion Copyright (C) 28 | 29 | using System; 30 | using System.Diagnostics; 31 | using System.IO; 32 | using System.Windows.Forms; 33 | using NLog; 34 | 35 | namespace Liquesce 36 | { 37 | /// 38 | /// 39 | /// 40 | static public class DisplayLog 41 | { 42 | static private readonly Logger Log = LogManager.GetCurrentClassLogger(); 43 | 44 | public static string FindLogLocation(string logLocation) 45 | { 46 | return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), 47 | logLocation); 48 | } 49 | 50 | static public string FindLogLocationViaOpen(string logLocation) 51 | { 52 | OpenFileDialog openFileDialog = new OpenFileDialog 53 | { 54 | Filter = "Log files (*.log)|*.log|Archive logs (*.*)|*.*", 55 | FileName = "*.log", 56 | FilterIndex = 2, 57 | Title = "Select name to view contents", 58 | InitialDirectory = FindLogLocation(logLocation) 59 | }; 60 | 61 | return (openFileDialog.ShowDialog() == DialogResult.OK) ? openFileDialog.FileName : string.Empty; 62 | } 63 | 64 | /// 65 | /// 66 | /// 67 | static public void LogDisplay(string logLocation) 68 | { 69 | try 70 | { 71 | logLocation = FindLogLocationViaOpen(logLocation); 72 | if (!string.IsNullOrEmpty(logLocation)) 73 | { 74 | Process word = Process.Start("Wordpad.exe", '"' + logLocation + '"'); 75 | if (word != null) 76 | { 77 | word.WaitForInputIdle(); 78 | SendKeys.SendWait("^{END}"); 79 | } 80 | } 81 | } 82 | catch (Exception ex) 83 | { 84 | Log.ErrorException("OpenFile has an exception: ", ex); 85 | } 86 | } 87 | } 88 | } -------------------------------------------------------------------------------- /LiquesceSvc/LowLevelOSAccess/SafeHGlobalHandle.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Runtime.ConstrainedExecution; 3 | using System.Runtime.InteropServices; 4 | 5 | namespace LiquesceSvc 6 | { 7 | /// 8 | /// A for a global memory allocation. 9 | /// 10 | public sealed class SafeHGlobalHandle : SafeHandle 11 | { 12 | /// 13 | /// Initializes a new instance of the class. 14 | /// 15 | /// The initial handle value. 16 | /// The size of this memory block, in bytes. 17 | [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] 18 | private SafeHGlobalHandle(IntPtr toManage, uint size) 19 | : base(IntPtr.Zero, true) 20 | { 21 | Size = size; 22 | SetHandle(toManage); 23 | } 24 | 25 | /// 26 | /// Initializes a new instance of the class. 27 | /// 28 | private SafeHGlobalHandle() 29 | : base(IntPtr.Zero, true) 30 | { 31 | } 32 | 33 | 34 | #region Properties 35 | 36 | /// 37 | /// Gets a value indicating whether the handle value is invalid. 38 | /// 39 | /// true if the handle value is invalid; otherwise, false 40 | public override bool IsInvalid 41 | { 42 | get { return IntPtr.Zero == handle; } 43 | } 44 | 45 | /// 46 | /// Returns the size of this memory block. 47 | /// 48 | /// The size of this memory block, in bytes. 49 | public uint Size { get; private set; } 50 | 51 | #endregion 52 | 53 | #region Methods 54 | 55 | /// 56 | /// Allocates memory from the unmanaged memory of the process using GlobalAlloc. 57 | /// 58 | /// The number of bytes in memory required. 59 | /// A SafeHGlobalHandle representing the memory. 60 | /// There is insufficient memory to satisfy the request. 61 | public static SafeHGlobalHandle Allocate(uint bytes) 62 | { 63 | return new SafeHGlobalHandle(Marshal.AllocHGlobal((int) bytes), bytes); 64 | } 65 | 66 | /// 67 | /// Returns an invalid handle. 68 | /// 69 | /// An invalid SafeHGlobalHandle. 70 | public static SafeHGlobalHandle Invalid() 71 | { 72 | return new SafeHGlobalHandle(); 73 | } 74 | 75 | /// 76 | /// Executes the code required to free the handle. 77 | /// 78 | /// 79 | /// true if the handle is released successfully; 80 | /// otherwise, in the event of a catastrophic failure, false. 81 | /// In this case, it generates a releaseHandleFailed MDA Managed Debugging Assistant. 82 | /// 83 | protected override bool ReleaseHandle() 84 | { 85 | Marshal.FreeHGlobal(handle); 86 | return true; 87 | } 88 | 89 | #endregion 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /Liquesce/Shared/SplitContainerEx.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Drawing; 3 | using System.Windows.Forms; 4 | 5 | namespace Liquesce 6 | { 7 | /// 8 | /// Draw dots, bar, and remove focus after drag 9 | /// 10 | public class SplitContainerEx : SplitContainer 11 | { 12 | /// Determines the thickness of the splitter. 13 | [DefaultValue(typeof(int), "5"), Description("Determines the thickness of the splitter.")] 14 | public virtual new int SplitterWidth 15 | { 16 | get { return base.SplitterWidth; } 17 | set 18 | { 19 | if (value < 5) 20 | value = 5; 21 | 22 | base.SplitterWidth = value; 23 | } 24 | } 25 | 26 | private bool _painting; 27 | public override bool Focused 28 | { 29 | get { return _painting ? false : base.Focused; } 30 | } 31 | 32 | protected override void OnPaint(PaintEventArgs e) 33 | { 34 | _painting = true; 35 | 36 | try 37 | { 38 | base.OnPaint(e); 39 | // ControlPaint.DrawGrabHandle(e.Graphics, SplitterRectangle, true, Enabled); 40 | 41 | //paint the three dots' 42 | Point[] points = new Point[4]; 43 | int w = Width; 44 | int h = Height; 45 | int d = SplitterDistance; 46 | int sW = SplitterWidth; 47 | int sWC = (sW / 2); 48 | 49 | if (Orientation == Orientation.Horizontal) 50 | { 51 | e.Graphics.DrawLine(SystemPens.ControlLightLight, 0, d + sWC-1, w, d + sWC-1); 52 | //e.Graphics.DrawLine(SystemPens.Control, 0, d + (sW / 2), w, d + (sW / 2)); 53 | e.Graphics.DrawLine(SystemPens.ControlDark, 0, d + sWC+1, w, d + sWC+1); 54 | points[0] = new Point((w / 2) - 15, d + sWC); 55 | points[1] = new Point(points[0].X + 10, points[0].Y); 56 | points[2] = new Point(points[0].X + 20, points[0].Y); 57 | points[3] = new Point(points[0].X + 30, points[0].Y); 58 | } 59 | else 60 | { 61 | e.Graphics.DrawLine(SystemPens.ControlLightLight, d + sWC-1, 0, d + sWC-1, h); 62 | //e.Graphics.DrawLine(SystemPens.ControlDark, d + (sW / 2), 0, d + (sW / 2), h); 63 | e.Graphics.DrawLine(SystemPens.ControlDark, d + sWC+1, 0, d + sWC+1, h); 64 | points[0] = new Point(d + sWC, (h / 2) - 15); 65 | points[1] = new Point(points[0].X, points[0].Y + 10); 66 | points[2] = new Point(points[0].X, points[0].Y + 20); 67 | points[3] = new Point(points[0].X, points[0].Y + 30); 68 | } 69 | 70 | foreach (Point p in points) 71 | { 72 | p.Offset(-2, -2); 73 | e.Graphics.FillEllipse(SystemBrushes.ControlDark, new Rectangle(p, new Size(3, 3))); 74 | 75 | p.Offset(1, 1); 76 | e.Graphics.FillEllipse(SystemBrushes.ControlLight, new Rectangle(p, new Size(3, 3))); 77 | } 78 | } 79 | finally 80 | { 81 | _painting = false; 82 | } 83 | } 84 | 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /LiquesceTray/FreeSpace.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace LiquesceTray 2 | { 3 | partial class FreeSpace 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 Windows Form 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.components = new System.ComponentModel.Container(); 32 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FreeSpace)); 33 | this.timer1 = new System.Windows.Forms.Timer(this.components); 34 | this.flowLayout = new System.Windows.Forms.FlowLayoutPanel(); 35 | this.SuspendLayout(); 36 | // 37 | // timer1 38 | // 39 | this.timer1.Enabled = true; 40 | this.timer1.Interval = 3000; 41 | this.timer1.Tick += new System.EventHandler(this.timer1_Tick); 42 | // 43 | // flowLayout 44 | // 45 | this.flowLayout.AutoScroll = true; 46 | this.flowLayout.Dock = System.Windows.Forms.DockStyle.Fill; 47 | this.flowLayout.Location = new System.Drawing.Point(0, 0); 48 | this.flowLayout.Name = "flowLayout"; 49 | this.flowLayout.Size = new System.Drawing.Size(814, 362); 50 | this.flowLayout.TabIndex = 0; 51 | // 52 | // FreeSpace 53 | // 54 | this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F); 55 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 56 | this.ClientSize = new System.Drawing.Size(814, 362); 57 | this.Controls.Add(this.flowLayout); 58 | this.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 59 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 60 | this.MaximumSize = new System.Drawing.Size(939, 107688); 61 | this.MinimizeBox = false; 62 | this.MinimumSize = new System.Drawing.Size(830, 40); 63 | this.Name = "FreeSpace"; 64 | this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; 65 | this.Text = "Liquesce Free Space"; 66 | this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FreeSpace_FormClosing); 67 | this.Load += new System.EventHandler(this.Form1_Load); 68 | this.ResumeLayout(false); 69 | 70 | } 71 | 72 | #endregion 73 | 74 | private System.Windows.Forms.Timer timer1; 75 | private System.Windows.Forms.FlowLayoutPanel flowLayout; 76 | 77 | 78 | 79 | 80 | } 81 | } -------------------------------------------------------------------------------- /LiquesceFaçade/LiquesceCallBackProxy.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2010-2012 Simon Coghlan (Aka Smurf-IV) 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | 27 | using System; 28 | using System.ServiceModel; 29 | 30 | namespace LiquesceFacade 31 | { 32 | public class LiquesceCallBackProxy : DuplexClientBase, ILiquesceCallBack 33 | { 34 | 35 | public LiquesceCallBackProxy(InstanceContext callbackInstance) 36 | : base(callbackInstance) 37 | { 38 | } 39 | 40 | public LiquesceCallBackProxy(InstanceContext callbackInstance, string endpointConfigurationName) 41 | : base(callbackInstance, endpointConfigurationName) 42 | { 43 | } 44 | 45 | public LiquesceCallBackProxy(InstanceContext callbackInstance, string endpointConfigurationName, string remoteAddress) 46 | : base(callbackInstance, endpointConfigurationName, remoteAddress) 47 | { 48 | } 49 | 50 | public LiquesceCallBackProxy(InstanceContext callbackInstance, string endpointConfigurationName, EndpointAddress remoteAddress) 51 | : base(callbackInstance, endpointConfigurationName, remoteAddress) 52 | { 53 | } 54 | 55 | public LiquesceCallBackProxy(InstanceContext callbackInstance, System.ServiceModel.Channels.Binding binding, EndpointAddress remoteAddress) 56 | : base(callbackInstance, binding, remoteAddress) 57 | { 58 | } 59 | 60 | #region Implementation of ILiquesceCallBack 61 | 62 | public void Subscribe(Client id) 63 | { 64 | try 65 | { 66 | base.Channel.Subscribe(id); 67 | } 68 | catch (EndpointNotFoundException ex) 69 | { 70 | 71 | throw new ApplicationException("Liquesce service is off. Please start the Liquesce server first then try to connect",ex); 72 | } 73 | catch (CommunicationException ex) 74 | { 75 | 76 | throw new ApplicationException("Liquesce Service is off. Please start the Liquesce server first then try to connect", ex); 77 | } 78 | } 79 | 80 | public void Unsubscribe(Client id) 81 | { 82 | base.Channel.Unsubscribe(id); 83 | } 84 | 85 | #endregion 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /ThirdParty/CBFSWixCA/TestTheCBFSInstall/TestTheCBFSInstall.wixproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Debug 5 | x86 6 | 3.6 7 | {3737e08f-ff33-4483-93eb-b71200af17fa} 8 | 2.0 9 | TestTheCBFSInstall 10 | Package 11 | $(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets 12 | $(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets 13 | SAK 14 | SAK 15 | SAK 16 | SAK 17 | 18 | 19 | bin\$(Configuration)\ 20 | obj\$(Configuration)\ 21 | Debug 22 | 23 | 24 | bin\$(Configuration)\ 25 | obj\$(Configuration)\ 26 | False 27 | True 28 | 1137;1076 29 | 30 | 31 | 32 | 33 | 34 | 35 | CBFSWixCA 36 | {2bf998a5-8bed-4975-91c5-7893dd138320} 37 | True 38 | True 39 | Binaries;Content;Satellites 40 | INSTALLFOLDER 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | Liquesce.ico 51 | 52 | 53 | x86\msvcp100.dll 54 | 55 | 56 | x86\msvcr100.dll 57 | 58 | 59 | x64\msvcp100.dll 60 | 61 | 62 | x64\msvcr100.dll 63 | 64 | 65 | 66 | 67 | 75 | -------------------------------------------------------------------------------- /LiquesceTray/StateChangeHandler.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2010-2012 Simon Coghlan (Aka Smurf-IV) 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | 27 | using System; 28 | using System.ServiceModel; 29 | using LiquesceFacade; 30 | using NLog; 31 | 32 | namespace LiquesceTray 33 | { 34 | public class StateChangeHandler : IStateChange 35 | { 36 | private static readonly Logger Log = LogManager.GetCurrentClassLogger(); 37 | LiquesceCallBackProxy client; 38 | private readonly Client guid = new Client { id = Guid.NewGuid() }; 39 | 40 | public delegate void SetStateDelegate(LiquesceSvcState state, string text); 41 | private SetStateDelegate setStateDelegate; 42 | 43 | public void CreateCallBack( SetStateDelegate newDelegate) 44 | { 45 | try 46 | { 47 | setStateDelegate = newDelegate; 48 | NetNamedPipeBinding namedpipebinding = new NetNamedPipeBinding(); 49 | EndpointAddress endpointAddress = new EndpointAddress("net.pipe://localhost/LiquesceCallBackFacade"); 50 | InstanceContext context = new InstanceContext(this); 51 | client = new LiquesceCallBackProxy(context, namedpipebinding, endpointAddress); 52 | client.Subscribe(guid); 53 | } 54 | catch (Exception ex) 55 | { 56 | Log.ErrorException("CreateCallBack:", ex); 57 | Update(LiquesceSvcState.InError, ex.Message); 58 | client = null; 59 | setStateDelegate = null; 60 | } 61 | } 62 | 63 | public void RemoveCallback() 64 | { 65 | try 66 | { 67 | if (client != null) 68 | { 69 | client.Unsubscribe(guid); 70 | } 71 | } 72 | catch (Exception ex) 73 | { 74 | Log.ErrorException("RemoveCallback:", ex); 75 | Update(LiquesceSvcState.InError, ex.Message); 76 | } 77 | finally 78 | { 79 | client = null; 80 | setStateDelegate = null; 81 | } 82 | } 83 | 84 | #region Implementation of ILiquesceCallback 85 | 86 | public void Update(LiquesceSvcState state, string message) 87 | { 88 | SetStateDelegate handler = setStateDelegate; 89 | if (handler != null) 90 | handler(state, message); 91 | } 92 | 93 | #endregion 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /LiquesceTray/DropZone.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace LiquesceTray 2 | { 3 | partial class DropZone 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 Windows Form 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 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DropZone)); 32 | this.textBox1 = new System.Windows.Forms.TextBox(); 33 | this.listBox1 = new System.Windows.Forms.ListBox(); 34 | this.SuspendLayout(); 35 | // 36 | // textBox1 37 | // 38 | this.textBox1.Location = new System.Drawing.Point(14, 13); 39 | this.textBox1.Name = "textBox1"; 40 | this.textBox1.Size = new System.Drawing.Size(637, 22); 41 | this.textBox1.TabIndex = 0; 42 | // 43 | // listBox1 44 | // 45 | this.listBox1.FormattingEnabled = true; 46 | this.listBox1.ItemHeight = 14; 47 | this.listBox1.Location = new System.Drawing.Point(14, 41); 48 | this.listBox1.Name = "listBox1"; 49 | this.listBox1.Size = new System.Drawing.Size(637, 102); 50 | this.listBox1.TabIndex = 1; 51 | // 52 | // DropZone 53 | // 54 | this.AllowDrop = true; 55 | this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F); 56 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 57 | this.ClientSize = new System.Drawing.Size(666, 156); 58 | this.Controls.Add(this.listBox1); 59 | this.Controls.Add(this.textBox1); 60 | this.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 61 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; 62 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 63 | this.MaximizeBox = false; 64 | this.MinimizeBox = false; 65 | this.Name = "DropZone"; 66 | this.Opacity = 0.75D; 67 | this.ShowInTaskbar = false; 68 | this.Text = "DropZone - Drag and drop your files or folders here to see on which disks they ar" + 69 | "e!"; 70 | this.TopMost = true; 71 | this.Load += new System.EventHandler(this.DropZone_Load); 72 | this.DragDrop += new System.Windows.Forms.DragEventHandler(this.Dropper_DragDrop); 73 | this.DragEnter += new System.Windows.Forms.DragEventHandler(this.Dropper_DragEnter); 74 | this.ResumeLayout(false); 75 | this.PerformLayout(); 76 | 77 | } 78 | 79 | #endregion 80 | 81 | private System.Windows.Forms.TextBox textBox1; 82 | private System.Windows.Forms.ListBox listBox1; 83 | } 84 | } -------------------------------------------------------------------------------- /LiquesceTray/WindowLocation.cs: -------------------------------------------------------------------------------- 1 | // Code ideas stolen and adapted from 2 | // http://www.codeproject.com/Articles/25510/Restore-Form-Position-and-Size-in-C 3 | 4 | using System.Drawing; 5 | using System.Globalization; 6 | using System.Windows.Forms; 7 | 8 | namespace LiquesceTray 9 | { 10 | internal static class WindowLocation 11 | { 12 | public static void GeometryFromString(string thisWindowGeometry, Form formIn) 13 | { 14 | if (string.IsNullOrEmpty(thisWindowGeometry)) 15 | { 16 | return; 17 | } 18 | string[] numbers = thisWindowGeometry.Split('|'); 19 | string windowString = numbers[4]; 20 | switch (windowString) 21 | { 22 | case "Normal": 23 | { 24 | Point windowPoint = new Point(int.Parse(numbers[0], CultureInfo.InvariantCulture), 25 | int.Parse(numbers[1], CultureInfo.InvariantCulture)); 26 | Size windowSize = new Size(int.Parse(numbers[2], CultureInfo.InvariantCulture), 27 | int.Parse(numbers[3], CultureInfo.InvariantCulture)); 28 | 29 | bool locOkay = GeometryIsBizarreLocation(windowPoint, windowSize); 30 | bool sizeOkay = GeometryIsBizarreSize(windowSize); 31 | 32 | if (locOkay && sizeOkay) 33 | { 34 | formIn.Location = windowPoint; 35 | formIn.Size = windowSize; 36 | formIn.StartPosition = FormStartPosition.Manual; 37 | formIn.WindowState = FormWindowState.Normal; 38 | } 39 | else if (sizeOkay) 40 | { 41 | formIn.Size = windowSize; 42 | } 43 | } 44 | break; 45 | case "Maximized": 46 | formIn.Location = new Point(100, 100); 47 | formIn.StartPosition = FormStartPosition.Manual; 48 | formIn.WindowState = FormWindowState.Maximized; 49 | break; 50 | } 51 | } 52 | 53 | private static bool GeometryIsBizarreLocation(Point loc, Size size) 54 | { 55 | bool locOkay; 56 | if (loc.X < 0 || loc.Y < 0) 57 | { 58 | locOkay = false; 59 | } 60 | else if (loc.X + size.Width > Screen.PrimaryScreen.WorkingArea.Width) 61 | { 62 | locOkay = false; 63 | } 64 | else if (loc.Y + size.Height > Screen.PrimaryScreen.WorkingArea.Height) 65 | { 66 | locOkay = false; 67 | } 68 | else 69 | { 70 | locOkay = true; 71 | } 72 | return locOkay; 73 | } 74 | 75 | private static bool GeometryIsBizarreSize(Size size) 76 | { 77 | return (size.Height <= Screen.PrimaryScreen.WorkingArea.Height && 78 | size.Width <= Screen.PrimaryScreen.WorkingArea.Width); 79 | } 80 | 81 | public static string GeometryToString(Form mainForm) 82 | { 83 | // Use internal string allocated buffer to make the final string, rather than individual string concats. 84 | return string.Join( "|", new string[] {mainForm.Location.X.ToString(CultureInfo.InvariantCulture), 85 | mainForm.Location.Y.ToString(CultureInfo.InvariantCulture), 86 | mainForm.Size.Width.ToString(CultureInfo.InvariantCulture), 87 | mainForm.Size.Height.ToString(CultureInfo.InvariantCulture), 88 | mainForm.WindowState.ToString() 89 | }); 90 | } 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /Liquesce_Setup/Liquesce_Setup.wixproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Debug 5 | x86 6 | 3.5 7 | {ef06e5cb-374e-4e67-9057-785a3b7dad5a} 8 | 2.0 9 | Liquesce_Setup 10 | Package 11 | $(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets 12 | $(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets 13 | $/Liquesce/Liquesce-PhaseII/Liquesce_Setup 14 | {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} 15 | https://tfs.codeplex.com/tfs/tfs08 16 | . 17 | 18 | 19 | bin\$(Configuration)\ 20 | obj\$(Configuration)\ 21 | Debug 22 | 23 | 24 | bin\$(Configuration)\ 25 | obj\$(Configuration)\ 26 | False 27 | True 28 | ICE30 29 | 1137;1076 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | $(WixExtDir)\WixUIExtension.dll 40 | WixUIExtension 41 | 42 | 43 | $(WixExtDir)\WixUtilExtension.dll 44 | WixUtilExtension 45 | 46 | 47 | $(WixExtDir)\WixNetFxExtension.dll 48 | WixNetFxExtension 49 | 50 | 51 | $(WixExtDir)\WixFirewallExtension.dll 52 | WixFirewallExtension 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | CBFSWixCA 62 | {2bf998a5-8bed-4975-91c5-7893dd138320} 63 | True 64 | True 65 | Binaries;Content;Satellites 66 | INSTALLFOLDER 67 | 68 | 69 | 70 | 78 | -------------------------------------------------------------------------------- /LiquesceFaçade/RWLSExtension.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | 3 | // --------------------------------------------------------------------------------------------------------------- 4 | // 5 | // 6 | // This program is free software: you can redistribute it and/or modify 7 | // 8 | // This program is distributed in the hope that it will be useful, 9 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11 | // 12 | // 13 | // Url: http://stackoverflow.com/questions/407238/readerwriterlockslim-vs-monitor 14 | // 15 | // -------------------------------------------------------------------------------------------------------------------- 16 | 17 | #endregion Copyright (C) 18 | 19 | using System; 20 | using System.Threading; 21 | 22 | namespace LiquesceFacade 23 | { 24 | // Stolen from http://stackoverflow.com/questions/407238/readerwriterlockslim-vs-monitor 25 | // 26 | public static class RWLSExtension 27 | { 28 | public static ReadLockHelper ReadLock(this ReaderWriterLockSlim readerWriterLock) 29 | { 30 | return new ReadLockHelper(readerWriterLock); 31 | } 32 | 33 | public static UpgradeableReadLockHelper UpgradableReadLock(this ReaderWriterLockSlim readerWriterLock) 34 | { 35 | return new UpgradeableReadLockHelper(readerWriterLock); 36 | } 37 | 38 | public static WriteLockHelper WriteLock(this ReaderWriterLockSlim readerWriterLock) 39 | { 40 | return new WriteLockHelper(readerWriterLock); 41 | } 42 | 43 | public struct ReadLockHelper : IDisposable 44 | { 45 | private readonly ReaderWriterLockSlim readerWriterLock; 46 | 47 | public ReadLockHelper(ReaderWriterLockSlim readerWriterLock) 48 | { 49 | readerWriterLock.EnterReadLock(); 50 | this.readerWriterLock = readerWriterLock; 51 | } 52 | 53 | public void Dispose() 54 | { 55 | readerWriterLock.ExitReadLock(); 56 | } 57 | } 58 | 59 | public struct UpgradeableReadLockHelper : IDisposable 60 | { 61 | private readonly ReaderWriterLockSlim readerWriterLock; 62 | 63 | public UpgradeableReadLockHelper(ReaderWriterLockSlim readerWriterLock) 64 | { 65 | readerWriterLock.EnterUpgradeableReadLock(); 66 | this.readerWriterLock = readerWriterLock; 67 | } 68 | 69 | public void Dispose() 70 | { 71 | readerWriterLock.ExitUpgradeableReadLock(); 72 | } 73 | } 74 | 75 | public struct WriteLockHelper : IDisposable 76 | { 77 | private readonly ReaderWriterLockSlim readerWriterLock; 78 | 79 | public WriteLockHelper(ReaderWriterLockSlim readerWriterLock) 80 | { 81 | readerWriterLock.EnterWriteLock(); 82 | this.readerWriterLock = readerWriterLock; 83 | } 84 | 85 | public void Dispose() 86 | { 87 | readerWriterLock.ExitWriteLock(); 88 | } 89 | } 90 | } 91 | 92 | // Example usage 93 | 94 | //class ReaderWriterLockedList : SlowList 95 | //{ 96 | // ReaderWriterLockSlim slimLock = new ReaderWriterLockSlim(); 97 | 98 | // public override T this[int index] 99 | // { 100 | // get 101 | // { 102 | // using (slimLock.ReadLock()) 103 | // { 104 | // return base[index]; 105 | // } 106 | // } 107 | // set 108 | // { 109 | // using (slimLock.WriteLock()) 110 | // { 111 | // base[index] = value; 112 | // } 113 | // } 114 | // } 115 | //} 116 | } -------------------------------------------------------------------------------- /LiquesceTrayHelper/Program.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | 3 | // --------------------------------------------------------------------------------------------------------------- 4 | // 5 | // 6 | // Copyright (C) 2010-2014 Simon Coghlan (Aka Smurf-IV) 7 | // 8 | // This program is free software: you can redistribute it and/or modify 9 | // it under the terms of the GNU General Public License as published by 10 | // the Free Software Foundation, either version 2 of the License, or 11 | // any later version. 12 | // 13 | // This program is distributed in the hope that it will be useful, 14 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | // GNU General Public License for more details. 17 | // 18 | // You should have received a copy of the GNU General Public License 19 | // along with this program. If not, see http://www.gnu.org/licenses/. 20 | // 21 | // 22 | // Url: http://Liquesce.codeplex.com/ 23 | // Email: http://www.codeplex.com/site/users/view/smurfiv 24 | // 25 | // -------------------------------------------------------------------------------------------------------------------- 26 | 27 | #endregion Copyright (C) 28 | 29 | using System; 30 | using System.Diagnostics; 31 | using System.ServiceProcess; 32 | using System.Windows.Forms; 33 | 34 | namespace LiquesceTrayHelper 35 | { 36 | internal static class Program 37 | { 38 | private static void Main(string[] args) 39 | { 40 | try 41 | { 42 | AppDomain.CurrentDomain.UnhandledException += logUnhandledException; 43 | } 44 | catch (Exception ex) 45 | { 46 | try 47 | { 48 | MessageBox.Show(ex.Message, "Liquesce Service Control", MessageBoxButtons.OK, MessageBoxIcon.Error); 49 | } 50 | catch 51 | { 52 | } 53 | } 54 | try 55 | { 56 | foreach (string t in args) 57 | { 58 | switch (t.ToLower()) 59 | { 60 | case "-debug": 61 | Debugger.Launch(); 62 | break; 63 | 64 | case "stop": 65 | { 66 | ServiceController serviceController1 = new ServiceController { ServiceName = "LiquesceSvc" }; 67 | if (serviceController1.Status != ServiceControllerStatus.Stopped) 68 | { 69 | serviceController1.Stop(); 70 | } 71 | } 72 | break; 73 | 74 | case "start": 75 | { 76 | ServiceController serviceController1 = new ServiceController { ServiceName = "LiquesceSvc" }; 77 | if (serviceController1.Status != ServiceControllerStatus.Running) 78 | { 79 | serviceController1.Start(); 80 | } 81 | } 82 | break; 83 | } 84 | } 85 | } 86 | catch (Exception ex) 87 | { 88 | MessageBox.Show(ex.Message, "Liquesce Service Control", MessageBoxButtons.OK, MessageBoxIcon.Error); 89 | } 90 | } 91 | 92 | private static void logUnhandledException(object sender, UnhandledExceptionEventArgs e) 93 | { 94 | try 95 | { 96 | Exception ex = e.ExceptionObject as Exception; 97 | MessageBox.Show(ex != null ? ex.Message : "Unhandled Excpetion", "Liquesce Service Control", 98 | MessageBoxButtons.OK, MessageBoxIcon.Error); 99 | } 100 | catch 101 | { 102 | } 103 | } 104 | } 105 | } -------------------------------------------------------------------------------- /Liquesce/Tabs/MountingPoints.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2013 Simon Coghlan (Aka Smurf-IV) 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | 27 | using System; 28 | using System.Linq; 29 | using System.Windows.Forms; 30 | using LiquesceFacade; 31 | 32 | namespace Liquesce.Tabs 33 | { 34 | public partial class MountingPoints : UserControl, ITab 35 | { 36 | public MountingPoints() 37 | { 38 | InitializeComponent(); 39 | DoubleBuffered = true; 40 | } 41 | 42 | private ConfigDetails cd1; 43 | public ConfigDetails cd 44 | { 45 | set 46 | { 47 | cd1 = value; 48 | edit1.cd = cd; 49 | PopulateMountList(); 50 | } 51 | private get { return cd1; } 52 | } 53 | 54 | private void PopulateMountList() 55 | { 56 | listExistingMounts.Items.Clear(); 57 | foreach (MountDetail mt in cd1.MountDetails) 58 | { 59 | listExistingMounts.Items.Add(string.Format("{0} ({1})", mt.VolumeLabel, mt.DriveLetter)); 60 | } 61 | listExistingMounts.SelectedIndex = 0; 62 | } 63 | 64 | private void listExistingMounts_SelectedIndexChanged(object sender, EventArgs e) 65 | { 66 | edit1.SelectedIndex( listExistingMounts.SelectedIndex ); 67 | } 68 | 69 | private void btnNew_Click(object sender, EventArgs e) 70 | { 71 | int index = cd1.MountDetails.Count; 72 | cd1.MountDetails.Add(new MountDetail()); 73 | PopulateMountList(); 74 | listExistingMounts.SelectedIndex = index; 75 | edit1.Visible = true; 76 | pnlStart.Visible = false; 77 | } 78 | 79 | private void btnEdit_Click(object sender, EventArgs e) 80 | { 81 | edit1.Visible = true; 82 | pnlStart.Visible = false; 83 | } 84 | 85 | private void btnDelete_Click(object sender, EventArgs e) 86 | { 87 | if (DialogResult.Yes == 88 | MessageBox.Show(this, 89 | "Performing this action will remove the selected Mounted drive from this machine.\n Do you wish to continue ?", "Caution..", 90 | MessageBoxButtons.YesNo, MessageBoxIcon.Question)) 91 | { 92 | cd1.MountDetails.RemoveAt(listExistingMounts.SelectedIndex); 93 | if (!cd1.MountDetails.Any()) 94 | { 95 | cd1.MountDetails.Add(new MountDetail()); 96 | } 97 | } 98 | PopulateMountList(); 99 | } 100 | 101 | private void MountingPoints_Leave(object sender, EventArgs e) 102 | { 103 | // restore the "Landing visibility" 104 | pnlStart.Visible = true; 105 | edit1.Visible = false; 106 | } 107 | 108 | 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /LiquesceTray/DropZone.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2010-2011 fpFragon 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | 27 | using System; 28 | using System.IO; 29 | using System.Linq; 30 | using System.ServiceModel; 31 | using System.Windows.Forms; 32 | using LiquesceFacade; 33 | 34 | namespace LiquesceTray 35 | { 36 | public partial class DropZone : Form 37 | { 38 | private ConfigDetails config; 39 | 40 | public DropZone() 41 | { 42 | InitializeComponent(); 43 | } 44 | 45 | private void Dropper_DragEnter(object sender, DragEventArgs e) 46 | { 47 | e.Effect = e.Data.GetDataPresent(DataFormats.FileDrop) ? DragDropEffects.Copy : DragDropEffects.None; 48 | } 49 | 50 | private void Dropper_DragDrop(object sender, DragEventArgs e) 51 | { 52 | string[] strFiles = (string[])e.Data.GetData(DataFormats.FileDrop); 53 | GetAllRoots(strFiles[0]); 54 | } 55 | 56 | private void DropZone_Load(object sender, EventArgs e) 57 | { 58 | GetConfig(); 59 | 60 | } 61 | 62 | private bool GetConfig() 63 | { 64 | bool value = true; 65 | try 66 | { 67 | EndpointAddress endpointAddress = new EndpointAddress("net.pipe://localhost/LiquesceFacade"); 68 | NetNamedPipeBinding namedPipeBindingpublish = new NetNamedPipeBinding(); 69 | LiquesceProxy proxy = new LiquesceProxy(namedPipeBindingpublish, endpointAddress); 70 | 71 | config = proxy.ConfigDetails; 72 | } 73 | catch 74 | { 75 | value = false; 76 | } 77 | return value; 78 | } 79 | 80 | 81 | private void GetAllRoots(string liquescePath) 82 | { 83 | textBox1.Text = liquescePath; 84 | 85 | listBox1.Items.Clear(); 86 | 87 | // check if path is on liquesce drive 88 | if (config.MountDetails.Select(mt => mt.DriveLetter).Any(dv => dv[0] == liquescePath[0])) 89 | { 90 | // cut drive letter and : 91 | string relative = liquescePath.Substring(2); 92 | 93 | foreach (string root in config.MountDetails.Select(mt => mt.SourceLocations).SelectMany(scs => scs.Select(sc => sc.SourcePath))) 94 | { 95 | if (File.Exists(root + relative)) 96 | { 97 | listBox1.Items.Add(root + relative); 98 | } 99 | 100 | if (Directory.Exists(root + relative)) 101 | { 102 | listBox1.Items.Add(root + relative); 103 | } 104 | } 105 | } 106 | else 107 | { 108 | listBox1.Items.Add("File is not in Liquesce Drive."); 109 | } 110 | } 111 | 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /Liquesce_Setup/CBFS.wxs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 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 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | NOT Installed AND NOT UPGRADINGPRODUCTCODE 65 | NOT Installed AND NOT UPGRADINGPRODUCTCODE 66 | 67 | Installed AND NOT UPGRADINGPRODUCTCODE 68 | Installed AND NOT UPGRADINGPRODUCTCODE 69 | 70 | 71 | 72 | Installing CBFS 73 | Uninstalling CBFS 74 | 75 | 76 | -------------------------------------------------------------------------------- /Liquesce/Tabs/Welcome.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2013 Simon Coghlan (Aka Smurf-IV) 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | 27 | using System; 28 | using System.Reflection; 29 | using System.Windows.Forms; 30 | 31 | namespace Liquesce.Tabs 32 | { 33 | public partial class Welcome : UserControl 34 | { 35 | public Welcome() 36 | { 37 | InitializeComponent(); 38 | DoubleBuffered = true; 39 | 40 | // Converted from the Welcome.rtf text via notepad :-) 41 | richTextBox1.Rtf = @"{\rtf1\ansi\ansicpg1252\deff0\deflang2057{\fonttbl{\f0\fnil\fcharset0 Tahoma;}{\f1\fnil\fcharset2 Symbol;}} 42 | {\colortbl ;\red0\green0\blue255;} 43 | {\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\ul\b\f0\fs24 Welcome.\ulnone\b0\fs18\par 44 | \fs20 This is the management application for the \i Liquesce Phase \fs22 ][\fs20 Suite\i0 . It allows you to take your hard disks (internal or external) and make them appear as single large drive.\par 45 | \par 46 | \ul\b Performance Tip:\ulnone\b0\par 47 | Please ensure that for \i any \i0 mounted drive letter \i or \i0 folder that is created via Liquesce, is \i not \i0 protected by an Anti-Virus apllication.\par 48 | This is because 'It' (the AV) will see all file actions (opens, closes, queries, etc.) on both the source \b AND \b0 the new mount point, and will seriously impact your performance.\par 49 | \b\par 50 | \ul Debug Tips:\b0\par 51 | \pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-360\li720\ulnone Stop the service\par 52 | {\pntext\f1\'B7\tab}Delete the Svc logs\par 53 | {\pntext\f1\'B7\tab}Adjust your logging to Trace,\par 54 | {\pntext\f1\'B7\tab}Drop the threads down to 1, \par 55 | {\pntext\f1\'B7\tab}Start the service\par 56 | {\pntext\f1\'B7\tab}Perform the actions that cause a problem. e.g.\par 57 | \pard{\pntext\f0 i.\tab}{\*\pn\pnlvlbody\pnf0\pnindent0\pnstart1\pnlcrm{\pntxta.}} 58 | \fi-360\li1080 Use wordpad to open a file on the mounted drive (Make new if you can)\par 59 | {\pntext\f0 ii.\tab}Make some edits\par 60 | \pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-360\li720 Make a note of the time (UTC/GMT).\par 61 | {\pntext\f1\'B7\tab}Stop the service and zip them up \fs18\par 62 | \pard{\pntext\f0 i.\tab}{\*\pn\pnlvlbody\pnf0\pnindent0\pnstart1\pnlcrm{\pntxta.}} 63 | \fi-360\li1080\fs20 Use the 'Zip Logs' button in the Logging tab,\fs18\par 64 | \fs20{\pntext\f0 ii.\tab}Create a new issue here: {\field{\*\fldinst{HYPERLINK 'https://liquesce.codeplex.com/workitem/list/basic'}}{\fldrslt{\ul\cf1 https://liquesce.codeplex.com/workitem/list/basic}}}\f0\fs20 . \lang9\fs22\par 65 | \lang2057\fs20{\pntext\f0 iii.\tab}With the notes of how and when, fill in the details and attach the log(s)\lang9\fs22\par 66 | \pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-360\li360\lang2057\fs20 If the actions can be done via clicking things, then use PSR (Problem Steps Recorder) {\field{\*\fldinst{HYPERLINK 'http://www.msigeek.com/2410/problem-step-recorder-an-amazing-screen-capture-tool'}}{\fldrslt{\ul\cf1 http://www.msigeek.com/2410/problem-step-recorder-an-amazing-screen-capture-tool}}}\lang9\f0\fs22\par 67 | }"; 68 | } 69 | 70 | private void Welcome_Load(object sender, EventArgs e) 71 | { 72 | tsVersion.Text = Assembly.GetExecutingAssembly().GetName().Version.ToString(); 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /Liquesce/Tabs/Welcome.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace Liquesce.Tabs 2 | { 3 | partial class Welcome 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.richTextBox1 = new System.Windows.Forms.RichTextBox(); 32 | this.panel1 = new System.Windows.Forms.Panel(); 33 | this.label1 = new System.Windows.Forms.Label(); 34 | this.tsVersion = new System.Windows.Forms.Label(); 35 | this.panel1.SuspendLayout(); 36 | this.SuspendLayout(); 37 | // 38 | // richTextBox1 39 | // 40 | this.richTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; 41 | this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill; 42 | this.richTextBox1.Location = new System.Drawing.Point(0, 0); 43 | this.richTextBox1.Name = "richTextBox1"; 44 | this.richTextBox1.ReadOnly = true; 45 | this.richTextBox1.Size = new System.Drawing.Size(600, 461); 46 | this.richTextBox1.TabIndex = 1; 47 | this.richTextBox1.Text = ""; 48 | // 49 | // panel1 50 | // 51 | this.panel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; 52 | this.panel1.Controls.Add(this.label1); 53 | this.panel1.Controls.Add(this.tsVersion); 54 | this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; 55 | this.panel1.Location = new System.Drawing.Point(0, 461); 56 | this.panel1.Name = "panel1"; 57 | this.panel1.Size = new System.Drawing.Size(600, 14); 58 | this.panel1.TabIndex = 2; 59 | // 60 | // label1 61 | // 62 | this.label1.AutoSize = true; 63 | this.label1.Dock = System.Windows.Forms.DockStyle.Right; 64 | this.label1.Location = new System.Drawing.Point(460, 0); 65 | this.label1.Name = "label1"; 66 | this.label1.Size = new System.Drawing.Size(51, 14); 67 | this.label1.TabIndex = 0; 68 | this.label1.Text = "Version:"; 69 | // 70 | // tsVersion 71 | // 72 | this.tsVersion.AutoSize = true; 73 | this.tsVersion.Dock = System.Windows.Forms.DockStyle.Right; 74 | this.tsVersion.Location = new System.Drawing.Point(511, 0); 75 | this.tsVersion.Name = "tsVersion"; 76 | this.tsVersion.Size = new System.Drawing.Size(89, 14); 77 | this.tsVersion.TabIndex = 1; 78 | this.tsVersion.Text = "13.12.9999.21"; 79 | // 80 | // Welcome 81 | // 82 | this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F); 83 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 84 | this.Controls.Add(this.richTextBox1); 85 | this.Controls.Add(this.panel1); 86 | this.DoubleBuffered = true; 87 | this.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 88 | this.Name = "Welcome"; 89 | this.Size = new System.Drawing.Size(600, 475); 90 | this.Load += new System.EventHandler(this.Welcome_Load); 91 | this.panel1.ResumeLayout(false); 92 | this.panel1.PerformLayout(); 93 | this.ResumeLayout(false); 94 | 95 | } 96 | 97 | #endregion 98 | 99 | private System.Windows.Forms.RichTextBox richTextBox1; 100 | private System.Windows.Forms.Panel panel1; 101 | private System.Windows.Forms.Label label1; 102 | private System.Windows.Forms.Label tsVersion; 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /Liquesce/Program.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | 3 | // --------------------------------------------------------------------------------------------------------------- 4 | // 5 | // 6 | // Copyright (C) 2010-2014 Simon Coghlan (Aka Smurf-IV) 7 | // 8 | // This program is free software: you can redistribute it and/or modify 9 | // it under the terms of the GNU General Public License as published by 10 | // the Free Software Foundation, either version 2 of the License, or 11 | // any later version. 12 | // 13 | // This program is distributed in the hope that it will be useful, 14 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | // GNU General Public License for more details. 17 | // 18 | // You should have received a copy of the GNU General Public License 19 | // along with this program. If not, see http://www.gnu.org/licenses/. 20 | // 21 | // 22 | // Url: http://Liquesce.codeplex.com/ 23 | // Email: http://www.codeplex.com/site/users/view/smurfiv 24 | // 25 | // -------------------------------------------------------------------------------------------------------------------- 26 | #endregion Copyright (C) 27 | 28 | using System; 29 | using System.IO; 30 | using System.Reflection; 31 | using System.Threading; 32 | using System.Windows.Forms; 33 | 34 | using NLog; 35 | 36 | namespace Liquesce 37 | { 38 | internal static class Program 39 | { 40 | private static readonly Logger Log = LogManager.GetLogger("Program"); 41 | 42 | /// 43 | /// The main entry point for the application. 44 | /// 45 | [STAThread] 46 | private static void Main() 47 | { 48 | try 49 | { 50 | AppDomain.CurrentDomain.UnhandledException += logUnhandledException; 51 | } 52 | catch (Exception ex) 53 | { 54 | try 55 | { 56 | Log.FatalException("Failed to attach unhandled exception handler...", ex); 57 | } 58 | catch 59 | { 60 | } 61 | } 62 | try 63 | { 64 | Log.Error("====================================================================="); 65 | Log.Error("File Re-opened: Ver :" + Assembly.GetExecutingAssembly().GetName().Version); 66 | CheckAndRunSingleApp(); 67 | } 68 | catch (Exception ex) 69 | { 70 | Log.FatalException("Exception has not been caught by the rest of the application!", ex); 71 | MessageBox.Show(ex.Message, "Uncaught Exception - Exiting !"); 72 | } 73 | finally 74 | { 75 | Log.Error("File Closing"); 76 | Log.Error("====================================================================="); 77 | } 78 | } 79 | 80 | private static void CheckAndRunSingleApp() 81 | { 82 | string MutexName = string.Format("{0} [{1}]", Path.GetFileName(Application.ExecutablePath), Environment.UserName); 83 | bool GrantedOwnership; 84 | // ReSharper disable once UnusedVariable 85 | using (Mutex AppUserMutex = new Mutex(true, MutexName, out GrantedOwnership)) 86 | { 87 | if (GrantedOwnership) 88 | { 89 | Application.EnableVisualStyles(); 90 | Application.SetCompatibleTextRenderingDefault(false); 91 | Application.DoEvents(); 92 | 93 | Application.Run(new TabMainForm()); 94 | } 95 | else 96 | { 97 | MessageBox.Show(MutexName + " is already running"); 98 | } 99 | } 100 | } 101 | 102 | private static void logUnhandledException(object sender, UnhandledExceptionEventArgs e) 103 | { 104 | try 105 | { 106 | Log.Fatal("Unhandled exception.\r\n{0}", e.ExceptionObject); 107 | Exception ex = e.ExceptionObject as Exception; 108 | if (ex != null) 109 | { 110 | Log.FatalException("Exception details", ex); 111 | } 112 | else 113 | { 114 | Log.Fatal("Unexpected exception."); 115 | } 116 | } 117 | catch 118 | { 119 | } 120 | } 121 | } 122 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Liquesce 2 | Definition: melt from solid to liquid; mix in Synonyms: fuse, liquefy, blend, pool. 3 | 4 | Liquesce: dictionary description 5 | 6 | Definition: melt from solid to liquid; mix in 7 | Synonyms: fuse, liquefy, blend, pool. 8 | What is Liquesce? 9 | 10 | The driving force behind the Liquesce code base is to take you hard drives that have Space / Directories and merge them into a single representation in an explorer view. This is very similar to the “Drive Extender” functionality in WHS, but without the need to format your drives :-) 11 | 12 | The storage pool can use any type and size of hard drive, including SATA, IDE, ESATA, FIREWIRE, USB etc. 13 | 14 | If the drives have the same directory representation i.e. Movies on the root of both, then these will be merged into a single Movies directory within the view. 15 | 16 | Writing to this merged pool will have different strategies dependent on the setup, e.g. Folder / Balanced / Priority. 17 | 18 | image 19 | 20 | So read on and find out what Liquesce could possibly do for your separate hard drives (logically and physically), and see if it can be of use to you. 21 | 22 | For more information: go to The FAQS section 23 | OS Requirements: 24 | 25 | You will need the .Net 4.5.1 or greater, so please install that. 26 | And then run the MS updates to ensure that the security fixes are applied. 27 | 28 | Notes: 29 | - For Phase I code only you will need Dokan for the OS you are using. 30 | - For Phase II code only you will need .Net4 Full profile, for the OS you are using. 31 | Directory / Drive Merging 32 | 33 | After an install, the Management Application will be launched showing the default setup. 34 | 35 | This will be a direct mirror of Drive C with a default delay of over 32 seconds. 36 | 37 | The management window is split into three areas 38 | 39 | The File System 40 | Merge Points 41 | Expected Output 42 | 43 | The File System window shows what can be “Seen” as a potential source for the merge points. These can be opened and will show directories only. once you have selected a source, it can be dragged and dropped into the Merge Points area. 44 | 45 | The Merge Points, can be reordered and deleted in case mistakes a re made. The order in this window is used to determines the preference order for filling the storage locations. 46 | 47 | The Expected Output, allows you to traverse over the merged directories to see if the structure is correct. This will also show duplicate filenames if they exist, so please expand all the directories to see if any collisions have occurred. The system will not scan, as this is resource and time expensive. 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Below is an example of 3 small HDD’s (50MB), that have been used to set up an initial merge size of 150 MB. 56 | 57 | The “Hold Of Bytes” was set to 10MB, meaning that when a new file was to be placed onto the storage, and there is less than that number of bytes, it would move to the next in order. 58 | The configuration was then sent to the Liquesce Service via the menu operation “Send Configuration” 59 | The then Music Directory was created, and the Artist was copied into it (On the “N” drive). 60 | The Liquesce Service then spread the directory structure across the drives (See right hand explorer window) 61 | The management application was then refreshed and now you can see that it shows all the files from the album appearing as a single listing (Bottom window) 62 | Right clicking on the properties of the Music directory within the “N” drive shows that this is read as a single system. 63 | 64 | Merge-Results_thumb3[3] 65 | 66 | The Application Tray 67 | 68 | So why one of these ? 69 | 70 | Need to inform the logged on user that something might be going on. 71 | Need to have some way of alerting the normal user that things may not be good in the new drive 72 | Running out of space, 73 | unable to delete, 74 | Stats. 75 | Just need to show that it's running (Like AV's do :-) 76 | Application Management 77 | Current Space usage 78 | 79 | Current Space Usage 80 | 81 | The tray app when running on the host has a menu to show the distribution of the space over the mount points that make up the space available. 82 | 83 | Here's a view from XP 84 | Liquesce FreeDiskSpace.png 85 | - The light blue shows the amount of space currently allocated in the _backup directories 86 | - The Red border is showing that the drive has fallen below the "Hold Of Bytes" number 87 | - The Orange border is showing that the free space is approaching the "Hold Of Bytes" 88 | - The Green indicator bar (Below) shows where the next new file is likely to be created 89 | - All of this is updated on a timer 90 | -------------------------------------------------------------------------------- /Liquesce/Tabs/CurrentShares.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | 3 | // --------------------------------------------------------------------------------------------------------------- 4 | // 5 | // 6 | // Copyright (C) 2013-2014 Simon Coghlan (Aka Smurf-IV) 7 | // 8 | // This program is free software: you can redistribute it and/or modify 9 | // it under the terms of the GNU General Public License as published by 10 | // the Free Software Foundation, either version 2 of the License, or 11 | // any later version. 12 | // 13 | // This program is distributed in the hope that it will be useful, 14 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | // GNU General Public License for more details. 17 | // 18 | // You should have received a copy of the GNU General Public License 19 | // along with this program. If not, see http://www.gnu.org/licenses/. 20 | // 21 | // 22 | // Url: http://Liquesce.codeplex.com/ 23 | // Email: http://www.codeplex.com/site/users/view/smurfiv 24 | // 25 | // -------------------------------------------------------------------------------------------------------------------- 26 | 27 | #endregion Copyright (C) 28 | 29 | using System.Linq; 30 | using System.Text; 31 | using System.Windows.Forms; 32 | using LiquesceFacade; 33 | 34 | namespace Liquesce.Tabs 35 | { 36 | public partial class CurrentShares : UserControl, ITab 37 | { 38 | public CurrentShares() 39 | { 40 | InitializeComponent(); 41 | DoubleBuffered = true; 42 | // Converted from the CurrentShares.rtf text via notepad :-) 43 | richTextBox1.Rtf = @"{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 Tahoma;}{\f1\fnil\fcharset2 Symbol;}} 44 | {\colortbl ;\red255\green0\blue0;} 45 | {\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\lang2057\f0\fs18 The current active 'Mount Points' owned by Liquesce will need to be \cf1\b active\b0 \cf0 for this page to work correctly.\par 46 | \pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-360\li360 Once mounts are working, create shared folder(s) via windows.\par 47 | {\pntext\f1\'B7\tab}Next, Press refresh, and check that the share details shown here are correct.\par 48 | {\pntext\f1\'B7\tab}Once correct, press save in the Service Settings tab. \par 49 | {\pntext\f1\'B7\tab}When Liquesce restarts it will then re-enable these shares.\par 50 | \pard\sa200\sl276\slmult1\lang9\i Note:\line\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-360\li360\sa200\sl276\slmult1 Initial display will be from the last stored Liquesce configuration.\i0\par 51 | }"; 52 | } 53 | 54 | private ConfigDetails cd1; 55 | public ConfigDetails cd 56 | { 57 | set 58 | { 59 | cd1 = value; 60 | PopulateShareList(); 61 | } 62 | private get { return cd1; } 63 | } 64 | 65 | private void PopulateShareList() 66 | { 67 | // Populate the fields 68 | foreach (object[] row in cd.MountDetails 69 | .SelectMany(mt => mt.SharesToRestore 70 | .SelectMany(share =>share.UserAccessRules 71 | .Select(fsare => new[] { 72 | share.Path, 73 | share.Name + " : " + share.Description, 74 | GetAceInformation(fsare) 75 | } 76 | ) 77 | ).Cast()) 78 | ) 79 | { 80 | dataGridView1.Rows.Add(row); 81 | } 82 | } 83 | 84 | 85 | private void btnRefresh_Click(object sender, System.EventArgs e) 86 | { 87 | try 88 | { 89 | dataGridView1.Rows.Clear(); 90 | Enabled = false; 91 | UseWaitCursor = true; 92 | 93 | LanManShareHandler lmsHandler = new LanManShareHandler(); 94 | foreach (MountDetail mt in cd.MountDetails) 95 | { 96 | mt.SharesToRestore = lmsHandler.MatchDriveLanManShares(mt.DriveLetter); 97 | } 98 | PopulateShareList(); 99 | } 100 | finally 101 | { 102 | Enabled = true; 103 | UseWaitCursor = false; 104 | progressBar1.Style = ProgressBarStyle.Continuous; 105 | progressBar1.Value = 0; 106 | } 107 | } 108 | 109 | private string GetAceInformation(UserAccessRuleExport fsare) 110 | { 111 | StringBuilder info = new StringBuilder(fsare.DomainUserIdentity); 112 | info.Append(" : ").Append(fsare.AccessMask); 113 | return info.ToString(); 114 | } 115 | } 116 | } -------------------------------------------------------------------------------- /LiquesceTray/Program.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | 3 | // --------------------------------------------------------------------------------------------------------------- 4 | // 5 | // 6 | // Copyright (C) 2010-2014 Simon Coghlan (Aka Smurf-IV) 7 | // 8 | // This program is free software: you can redistribute it and/or modify 9 | // it under the terms of the GNU General Public License as published by 10 | // the Free Software Foundation, either version 2 of the License, or 11 | // any later version. 12 | // 13 | // This program is distributed in the hope that it will be useful, 14 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | // GNU General Public License for more details. 17 | // 18 | // You should have received a copy of the GNU General Public License 19 | // along with this program. If not, see http://www.gnu.org/licenses/. 20 | // 21 | // 22 | // Url: http://Liquesce.codeplex.com/ 23 | // Email: http://www.codeplex.com/site/users/view/smurfiv 24 | // 25 | // -------------------------------------------------------------------------------------------------------------------- 26 | 27 | #endregion Copyright (C) 28 | 29 | using System; 30 | using System.IO; 31 | using System.Reflection; 32 | using System.Threading; 33 | using System.Windows.Forms; 34 | using LiquesceTray.Properties; 35 | using NLog; 36 | 37 | namespace LiquesceTray 38 | { 39 | internal static class Program 40 | { 41 | private static readonly Logger Log = LogManager.GetCurrentClassLogger(); 42 | private static NotifyIconHandler nih; 43 | 44 | /// 45 | /// The main entry point for the application. 46 | /// 47 | [STAThread] 48 | private static void Main() 49 | { 50 | try 51 | { 52 | AppDomain.CurrentDomain.UnhandledException += logUnhandledException; 53 | } 54 | catch (Exception ex) 55 | { 56 | try 57 | { 58 | Log.FatalException("Failed to attach unhandled exception handler...", ex); 59 | } 60 | catch 61 | { 62 | } 63 | } 64 | try 65 | { 66 | Log.Error("====================================================================="); 67 | Log.Error("File Re-opened: Ver :" + Assembly.GetExecutingAssembly().GetName().Version); 68 | CheckAndRunSingleApp(); 69 | } 70 | catch (Exception ex) 71 | { 72 | Log.FatalException("Exception has not been caught by the rest of the application!", ex); 73 | MessageBox.Show(ex.Message, "Uncaught Exception - Exiting !"); 74 | } 75 | finally 76 | { 77 | if ((nih != null) 78 | && (nih.notifyIcon1 != null) 79 | ) 80 | { 81 | nih.notifyIcon1.Visible = false; 82 | } 83 | 84 | Log.Error("File Closing"); 85 | Log.Error("====================================================================="); 86 | } 87 | } 88 | 89 | private static void CheckAndRunSingleApp() 90 | { 91 | string mutexName = string.Format("{0} [{1}]", Path.GetFileName(Application.ExecutablePath), Environment.UserName); 92 | bool grantedOwnership; 93 | using (Mutex appUserMutex = new Mutex(true, mutexName, out grantedOwnership)) 94 | { 95 | if (grantedOwnership) 96 | { 97 | Application.EnableVisualStyles(); 98 | Application.SetCompatibleTextRenderingDefault(false); 99 | Application.DoEvents(); 100 | nih = new NotifyIconHandler(); 101 | Application.Run(new HiddenFormToAcceptCloseMessage()); 102 | } 103 | else 104 | { 105 | MessageBox.Show(mutexName + Resources.Program_CheckAndRunSingleApp__is_already_running); 106 | } 107 | } 108 | } 109 | 110 | private static void logUnhandledException(object sender, UnhandledExceptionEventArgs e) 111 | { 112 | try 113 | { 114 | Log.Fatal("Unhandled exception.\r\n{0}", e.ExceptionObject); 115 | Exception ex = e.ExceptionObject as Exception; 116 | if (ex != null) 117 | { 118 | Log.FatalException("Exception details", ex); 119 | } 120 | else 121 | { 122 | Log.Fatal("Unexpected exception."); 123 | } 124 | } 125 | catch 126 | { 127 | } 128 | } 129 | } 130 | } -------------------------------------------------------------------------------- /LiquesceSvc/LowLevelOSAccess/Win32Structs.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | // --------------------------------------------------------------------------------------------------------------- 3 | // 4 | // 5 | // Copyright (C) 2013 Smurf-IV 6 | // 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 2 of the License, or 10 | // any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see http://www.gnu.org/licenses/. 19 | // 20 | // 21 | // Url: http://Liquesce.codeplex.com/ 22 | // Email: http://www.codeplex.com/site/users/view/smurfiv 23 | // 24 | // -------------------------------------------------------------------------------------------------------------------- 25 | #endregion 26 | 27 | using System; 28 | using System.Runtime.InteropServices; 29 | 30 | namespace LiquesceSvc 31 | { 32 | 33 | //// 34 | /// 35 | /// Structure used for Windows API calls related to file information. 36 | /// 37 | /// 38 | /// Workaround from http://www.pinvoke.net/default.aspx/Structures/WIN32_FIND_DATA.html 39 | /// 40 | // ReSharper disable FieldCanBeMadeReadOnly.Global 41 | [StructLayout(LayoutKind.Sequential, Pack = 4)] 42 | public struct WIN32_FIND_FILETIME 43 | { 44 | public UInt32 dwLowDateTime; 45 | public UInt32 dwHighDateTime; 46 | } 47 | // ReSharper restore FieldCanBeMadeReadOnly.Global 48 | 49 | /// 50 | /// http://msdn.microsoft.com/en-us/library/aa363788%28VS.85%29.aspx 51 | /// 52 | // ReSharper disable FieldCanBeMadeReadOnly.Global 53 | [StructLayout(LayoutKind.Sequential, Pack = 4)] 54 | public struct BY_HANDLE_FILE_INFORMATION 55 | { 56 | public uint dwFileAttributes; 57 | public WIN32_FIND_FILETIME ftCreationTime; 58 | public WIN32_FIND_FILETIME ftLastAccessTime; 59 | public WIN32_FIND_FILETIME ftLastWriteTime; 60 | public uint dwVolumeSerialNumber; 61 | public uint nFileSizeHigh; 62 | public uint nFileSizeLow; 63 | public uint dwNumberOfLinks; 64 | public uint nFileIndexHigh; 65 | public uint nFileIndexLow; 66 | } 67 | // ReSharper restore FieldCanBeMadeReadOnly.Global 68 | 69 | // ReSharper disable FieldCanBeMadeReadOnly.Global 70 | [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 4)] 71 | public struct WIN32_FIND_DATA 72 | { 73 | public uint dwFileAttributes; 74 | public WIN32_FIND_FILETIME ftCreationTime; 75 | public WIN32_FIND_FILETIME ftLastAccessTime; 76 | public WIN32_FIND_FILETIME ftLastWriteTime; 77 | public uint nFileSizeHigh; 78 | public uint nFileSizeLow; 79 | private readonly uint dwReserved0; 80 | private readonly uint dwReserved1; 81 | [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] 82 | public string cFileName; 83 | [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)] public readonly string cAlternateFileName; 84 | } 85 | // ReSharper restore FieldCanBeMadeReadOnly.Global 86 | 87 | // ReSharper disable UnusedMember.Global 88 | // http://msdn.microsoft.com/en-us/library/windows/desktop/aa362667(v=vs.85).aspx 89 | public enum FileStreamType 90 | { 91 | Data = 1, 92 | ExternalData = 2, 93 | SecurityData = 3, 94 | AlternateData = 4, 95 | Link = 5, 96 | PropertyData = 6, 97 | ObjectID = 7, 98 | ReparseData = 8, 99 | SparseDock = 9, 100 | BACKUP_TXFS_DATA // Transactional NTFS (TxF) data stream. This corresponds to the NTFS $TXF_DATA stream type. 101 | } 102 | [Flags] 103 | public enum FileStreamAttributes 104 | { 105 | None = 0, 106 | ModifiedWhenRead = 1, 107 | ContainsSecurity = 2, 108 | ContainsProperties = 4, 109 | Sparse = 8, 110 | } 111 | // ReSharper restore UnusedMember.Global 112 | 113 | // ReSharper disable FieldCanBeMadeReadOnly.Global 114 | [StructLayout(LayoutKind.Sequential, Pack = 4)] 115 | public struct WIN32_STREAM_ID 116 | { 117 | public UInt32 dwStreamType; 118 | public UInt32 dwStreamAttributes; 119 | public long Size; 120 | public UInt32 dwStreamNameSize; 121 | // WCHAR cStreamName[1]; 122 | } 123 | // ReSharper restore FieldCanBeMadeReadOnly.Global 124 | 125 | 126 | } -------------------------------------------------------------------------------- /LiquesceSvc/Program.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | 3 | // --------------------------------------------------------------------------------------------------------------- 4 | // 5 | // 6 | // Copyright (C) 2010-2014 Simon Coghlan (Aka Smurf-IV) 7 | // 8 | // This program is free software: you can redistribute it and/or modify 9 | // it under the terms of the GNU General Public License as published by 10 | // the Free Software Foundation, either version 2 of the License, or 11 | // any later version. 12 | // 13 | // This program is distributed in the hope that it will be useful, 14 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | // GNU General Public License for more details. 17 | // 18 | // You should have received a copy of the GNU General Public License 19 | // along with this program. If not, see http://www.gnu.org/licenses/. 20 | // 21 | // 22 | // Url: http://Liquesce.codeplex.com/ 23 | // Email: http://www.codeplex.com/site/users/view/smurfiv 24 | // 25 | // -------------------------------------------------------------------------------------------------------------------- 26 | 27 | #endregion Copyright (C) 28 | 29 | using System; 30 | using System.Diagnostics; 31 | using System.Reflection; 32 | using System.ServiceProcess; 33 | using System.Windows.Forms; 34 | using NLog; 35 | 36 | namespace LiquesceSvc 37 | { 38 | internal static class Program 39 | { 40 | static private readonly Logger Log = LogManager.GetCurrentClassLogger(); 41 | 42 | /// 43 | /// The main entry point for the application. 44 | /// 45 | /// 46 | /// Option to either start from SCM or from Console to allow debugging 47 | /// 48 | private static void Main(string[] args) 49 | { 50 | try 51 | { 52 | AppDomain.CurrentDomain.UnhandledException += logUnhandledException; 53 | } 54 | catch (Exception ex) 55 | { 56 | try 57 | { 58 | Log.FatalException("Failed to attach unhandled exception handler...", ex); 59 | } 60 | catch 61 | { 62 | } 63 | } 64 | try 65 | { 66 | Log.Fatal("====================================================================="); 67 | Log.Fatal("File Re-opened: Ver :" + Assembly.GetExecutingAssembly().GetName().Version); 68 | LiquesceService runner = new LiquesceService(); 69 | if ((args.Length > 0) && ("/debug" == args[0].ToLower())) 70 | { 71 | // main service object 72 | LiquesceService.RunningAsService = false; 73 | runner.StartService(args); 74 | Console.WriteLine("Press Q to quit"); 75 | Application.Run(); 76 | runner.StopService(); 77 | // We called the static run, so call the static exit 78 | Application.Exit(); 79 | } 80 | else 81 | { 82 | LiquesceService.RunningAsService = true; 83 | ServiceBase.Run(new ServiceBase[] { runner }); 84 | } 85 | } 86 | catch (Exception ex) 87 | { 88 | Log.FatalException("Exception has not been caught by the rest of the application!", ex); 89 | throw; // Force the log out to the logUnhandledException handler 90 | } 91 | finally 92 | { 93 | Log.Fatal("File Closing"); 94 | Log.Fatal("====================================================================="); 95 | } 96 | } 97 | 98 | private static void logUnhandledException(object sender, UnhandledExceptionEventArgs e) 99 | { 100 | try 101 | { 102 | string cs = Assembly.GetExecutingAssembly().GetName().Name; 103 | EventLog eventLog = new EventLog(); 104 | if (!EventLog.SourceExists(cs)) 105 | { 106 | EventLog.CreateEventSource(cs, "Application"); 107 | } 108 | 109 | EventLog.WriteEntry(cs, e.ExceptionObject.ToString(), EventLogEntryType.Error); 110 | Log.Fatal("Unhandled exception.\r\n{0}", e.ExceptionObject); 111 | Exception ex = e.ExceptionObject as Exception; 112 | if (ex != null) 113 | { 114 | Log.FatalException("Exception details", ex); 115 | EventLog.WriteEntry(cs, ex.ToString(), EventLogEntryType.Error); 116 | } 117 | else 118 | { 119 | Log.Fatal("Unexpected exception."); 120 | } 121 | } 122 | catch 123 | { 124 | } 125 | } 126 | } 127 | } -------------------------------------------------------------------------------- /Liquesce_Setup/Service.wxs: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 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 | 37 | 38 | 40 | 41 | 43 | 44 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 2 ]]> 56 | 2 ]]> 57 | 58 | 2 ]]> 59 | 2 ]]> 60 | 61 | 2 ]]> 62 | 2 ]]> 63 | 64 | 65 | 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /Liquesce/TabMainForm.cs: -------------------------------------------------------------------------------- 1 | #region Copyright (C) 2 | 3 | // --------------------------------------------------------------------------------------------------------------- 4 | // 5 | // 6 | // Copyright (C) 2013-2014 Simon Coghlan (Aka Smurf-IV) 7 | // 8 | // This program is free software: you can redistribute it and/or modify 9 | // it under the terms of the GNU General Public License as published by 10 | // the Free Software Foundation, either version 2 of the License, or 11 | // any later version. 12 | // 13 | // This program is distributed in the hope that it will be useful, 14 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | // GNU General Public License for more details. 17 | // 18 | // You should have received a copy of the GNU General Public License 19 | // along with this program. If not, see http://www.gnu.org/licenses/. 20 | // 21 | // 22 | // Url: http://Liquesce.codeplex.com/ 23 | // Email: http://www.codeplex.com/site/users/view/smurfiv 24 | // 25 | // -------------------------------------------------------------------------------------------------------------------- 26 | #endregion Copyright (C) 27 | 28 | using System.Drawing; 29 | using System.Drawing.Drawing2D; 30 | using System.Linq; 31 | using System.Windows.Forms; 32 | 33 | using Liquesce.Tabs; 34 | using LiquesceFacade; 35 | using LiquesceTray; 36 | 37 | namespace Liquesce 38 | { 39 | public partial class TabMainForm : Form 40 | { 41 | private readonly ConfigDetails cd = new ConfigDetails(); 42 | 43 | public TabMainForm() 44 | { 45 | InitializeComponent(); 46 | DoubleBuffered = true; 47 | ResizeRedraw = true; 48 | 49 | if (Properties.Settings.Default.UpdateRequired) 50 | { 51 | // Thanks go to http://cs.rthand.com/blogs/blog_with_righthand/archive/2005/12/09/246.aspx 52 | Properties.Settings.Default.Upgrade(); 53 | Properties.Settings.Default.UpdateRequired = false; 54 | Properties.Settings.Default.Save(); 55 | } 56 | WindowLocation.GeometryFromString(Properties.Settings.Default.WindowLocation, this); 57 | new DealWithTheCfgChanging().ReadConfigDetails(ref cd); 58 | foreach (TabPage control in tabControl1.TabPages) 59 | { 60 | foreach (ITab tab in control.Controls.OfType()) 61 | { 62 | tab.cd = cd; 63 | break; 64 | } 65 | } 66 | } 67 | 68 | // Stop the Tab control from flickering during resize ! 69 | protected override CreateParams CreateParams 70 | { 71 | get 72 | { 73 | CreateParams cp = base.CreateParams; 74 | cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED 75 | cp.ExStyle |= 0x00080000; // Turn on WS_EX_LAYERED 76 | cp.Style &= ~0x02000000; // Turn off WS_CLIPCHILDREN 77 | return cp; 78 | } 79 | } 80 | 81 | private readonly StringFormat stringFormat = new StringFormat 82 | { 83 | Alignment = StringAlignment.Center, 84 | LineAlignment = StringAlignment.Center 85 | }; 86 | 87 | private void tabControl1_DrawItem(object sender, DrawItemEventArgs e) 88 | { 89 | string tabName = tabControl1.TabPages[e.Index].Text; 90 | //Find if it is selected, this one will be hightlighted... 91 | if (e.Index == tabControl1.SelectedIndex) 92 | { 93 | e.Graphics.FillRectangle(SystemBrushes.GradientActiveCaption, e.Bounds); 94 | } 95 | e.Graphics.DrawString(tabName, Font, SystemBrushes.ControlText, tabControl1.GetTabRect(e.Index), stringFormat); 96 | DrawTabPageBorder(tabControl1.SelectedIndex, SystemBrushes.GradientActiveCaption, e.Graphics); 97 | } 98 | 99 | private const int highlightWidth = 2; 100 | 101 | private void DrawTabPageBorder(int index, Brush findHighlightColor, Graphics graphics) 102 | { 103 | graphics.SmoothingMode = SmoothingMode.HighQuality; 104 | Rectangle pageBounds = tabControl1.TabPages[index].Bounds; 105 | if (highlightWidth > 1) 106 | { 107 | pageBounds.Inflate(highlightWidth - 1, highlightWidth - 1); 108 | } 109 | using (Pen borderPen = new Pen(findHighlightColor, highlightWidth)) 110 | { 111 | graphics.DrawRectangle(borderPen, pageBounds); 112 | } 113 | } 114 | 115 | private void LandingZone_FormClosing(object sender, FormClosingEventArgs e) 116 | { 117 | // persist our geometry string. 118 | Properties.Settings.Default.WindowLocation = WindowLocation.GeometryToString(this); 119 | Properties.Settings.Default.Save(); 120 | } 121 | 122 | private void TabMainForm_Shown(object sender, System.EventArgs e) 123 | { 124 | BringToFront(); 125 | Activate(); 126 | } 127 | } 128 | } -------------------------------------------------------------------------------- /Liquesce_Setup/Client.wxs: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 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 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | Not Installed 78 | Not Installed 79 | 80 | 81 | 82 | 83 | --------------------------------------------------------------------------------