Compare commits

...

237 Commits

Author SHA1 Message Date
Sean Kaim
77e702da6c Merge pull request #113 from mRemoteNG/develop
exception fixes
2016-05-29 22:07:01 -04:00
Sean Kaim
1560339377 Fix MR-838 - correct cast 2016-05-29 21:58:54 -04:00
Sean Kaim
f0aaab1299 Fix MR-839 - correct cast 2016-05-29 21:55:15 -04:00
Sean Kaim
4eced42981 Fix MR-840 (exception entering fullscreen)
bug introduced as part of the C# conversion

VB code:
Public Fullscreen As New Misc.Fullscreen(Me)

Private Sub mMenViewFullscreen_Click(sender As Object, e As EventArgs)
Handles mMenViewFullscreen.Click
Fullscreen.Value = Not Fullscreen.Value
mMenViewFullscreen.Checked = Fullscreen.Value
End Sub
2016-05-29 21:35:41 -04:00
hiriumi
1da2839cc3 Cleaned up PortScan.cs 2016-05-28 22:16:38 -07:00
hiriumi
0200281732 Cleaned up mRemoteNG.cs 2016-05-28 22:12:25 -07:00
hiriumi
3d9f9ff4c2 Cleaned up ConnectionIcon.cs 2016-05-28 21:55:38 -07:00
hiriumi
60048b4450 Cleaned up ConfigWindow.cs 2016-05-28 21:47:47 -07:00
hiriumi
4bd67c15c0 More Japanese translation. Not complete yet. 2016-05-27 23:35:46 -07:00
hiriumi
3237e18d2d Removed redundant initialization. 2016-05-27 23:01:47 -07:00
hiriumi
fe17123707 Some more clean up of ThemeSerializer.cs 2016-05-27 22:59:57 -07:00
hiriumi
a51df79925 Cleaned up ThemeSerializer.cs 2016-05-27 22:52:54 -07:00
hiriumi
efbe78a77e Just a bit of clean up using ReSharper. 2016-05-27 22:49:23 -07:00
David Sparer
9f860a3f3e Resolved MR-683 - Validated then updated the German localization with provided file. 2016-05-27 14:33:06 -06:00
Sean Kaim
9dc5442743 minor clean up 2016-05-27 15:56:03 -04:00
Sean Kaim
e2d66235b5 Remove Microsoft.VisualBasic references & cleanup 2016-05-27 15:49:03 -04:00
David Sparer
cafad5599d Merge branch 'MR-836_Deleting_folder_only_deletes_2_connections' into develop
# Conflicts:
#	mRemoteV1/Tree/ConnectionTree.cs
2016-05-27 12:58:28 -06:00
Sean Kaim
6d8f375ae1 Remove Microsoft.VisualBasic references 2016-05-27 14:21:34 -04:00
David Sparer
a055d7f4a8 Slight optimization to prevent window flicker when deleting a folder with many connections. 2016-05-27 11:56:48 -06:00
Sean Kaim
09102325eb Fix MR-828 NullReferenceException SetNodeToolTip
Also, remove Microsoft.VisualBasic references
2016-05-27 13:56:04 -04:00
David Sparer
33c9774b21 There was still a bug with deleting folders that had contents. Using a builtin function to do this instead of trying to re-implement.
I am hoping this really does fix MR-836 this time.
2016-05-27 11:39:18 -06:00
David Sparer
d7f64fec4f Added check for null nodes in ConnectionTree.DeleteSelectedNode(). This now fully resolves the issues noted in MR-836 2016-05-27 11:22:40 -06:00
David Sparer
eab5a42d93 Refactored ConnectionTree.DeleteSelectedNode() - extracted some methods to make it more readable 2016-05-27 11:18:05 -06:00
David Sparer
5c7f120a7e Fixed bug with ConnectionTreeNode.IsEmpty(). Logic was inverted 2016-05-27 11:12:32 -06:00
David Sparer
d7d78d8053 Inverted conditional statement. This resolved the primary issue in MR-836 where deleting a non-empty folder would not delete all connections within it 2016-05-27 10:21:28 -06:00
David Sparer
cde7f114f9 Cleaned up some code noise in ConnectionTree 2016-05-27 09:40:34 -06:00
David Sparer
69f4904b5a Merge branch 'MR-834_support_uninstalling_pre-MSI_installs' into develop 2016-05-26 17:18:05 -06:00
David Sparer
93d54a915d Made the legacy uninstall a silent uninstall. Not sure if this is how we will want to release it, but it's reasonably user friendly 2016-05-26 16:47:39 -06:00
Sparer, David
fe9aa59690 Finished basic implementation of uninstalling legacy versions. 2016-05-26 15:37:12 -06:00
hiriumi
381a87ab50 Adding more Japanese translations in Language.ja-JP.resx file. It's not 100% complete yet. 2016-05-26 08:32:03 -07:00
hiriumi
ffea221568 Merge branch 'develop' of https://github.com/mRemoteNG/mRemoteNG.git 2016-05-25 17:53:27 -07:00
hiriumi
aaf3316e65 Added Japanese as a supported language and started to work on Language. ja-JP.resx. The language file itself is not 100% complete yet. 2016-05-25 16:05:21 -07:00
Sean Kaim
41664d2ef4 Make fonts consistent 2016-05-25 17:38:17 -04:00
Sean Kaim
717d4f0b9a Add CREDITS.TXT to About form 2016-05-25 17:27:49 -04:00
Sean Kaim
24873ffa9b Updated language files for RDP requirements 2016-05-25 15:49:01 -04:00
Sean Kaim
7f6e90758a Merge pull request #112 from mRemoteNG/remove_IPTextBox
Remove IPTextBox.dll and use a built-in control
2016-05-25 15:38:46 -04:00
Sean Kaim
5f4d565483 Remove IPTextBox.dll and use a built-in control 2016-05-25 15:37:33 -04:00
Sean Kaim
727e23ada9 DockPanelSuite updates and new theme 2016-05-25 12:29:42 -04:00
Sean Kaim
497363bc3a code clean up 2016-05-25 12:09:23 -04:00
Sean Kaim
6acf8b84ad code clean up and minor UserAgent change 2016-05-25 11:48:50 -04:00
Sean Kaim
daff0de0bd very minor code clean up 2016-05-25 10:55:36 -04:00
David Sparer
f6daa3b5dc Removed static reference to SystemMenu from Runtime. The only references to it were in frmMain 2016-05-24 20:07:25 -06:00
David Sparer
2c87d36cbb Merge remote-tracking branch 'origin/singleton' into frmMain_refactoring_experiment
# Conflicts:
#	mRemoteV1/App/ProgramRoot.cs
#	mRemoteV1/UI/Forms/frmMain.cs
2016-05-24 17:10:17 -06:00
David Sparer
3af3074ab9 Minor cleanup of frmOptions code (deleted dead space, reorder usings, reorder functions based on call order) 2016-05-24 16:56:56 -06:00
David Sparer
c00342df6f Refactoring: Extracted a method in frmOptions that sets the initially selected page 2016-05-24 16:53:47 -06:00
David Sparer
9bbd95a6f2 Fixed minor UI annoyance in frmOptions where you could not see the active page after clicking within that page. 2016-05-24 16:52:37 -06:00
Sparer, David
f1fe5d215c Fixed a few more subtle bugs in frmMain:WndProc() that were caused by the c# conversion 2016-05-24 15:33:20 -06:00
Sparer, David
36e1522a32 Fixed bug MR-826 by resolving an issue caused by the migration from VB to C#. 2016-05-24 13:29:17 -06:00
David Sparer
7c5f795bf4 Added documentation to native constants to help with troubleshooting WndProc 2016-05-22 12:09:07 -06:00
David Sparer
90258636ed Moved program initialization from frmMain to ProgramRoot 2016-05-22 11:15:18 -06:00
David Sparer
06ce840a8f Moved GetConnectionIcons call from frmMain to Startup 2016-05-22 10:48:29 -06:00
David Sparer
268c5a92d8 Minor cleanup in Startup 2016-05-22 10:45:41 -06:00
David Sparer
7f11783d46 Moved IEBrowserEmulation registration from frmMain to Startup 2016-05-22 10:45:02 -06:00
David Sparer
ae2d18e79c Removed unnecessary usings in options form test 2016-05-22 10:44:05 -06:00
David Sparer
58b9755d0c Cleaned up unnecessary usings and fully qualified names in MessageCollector 2016-05-22 10:37:27 -06:00
David Sparer
11a79c2f1f Removed Runtime.Log and replaced all references to Logger.Instance. This still breaks the law of demeter - we should fully wrap the log4net object in our own class at some point. 2016-05-22 10:34:24 -06:00
David Sparer
32742a6f4f Refactored Logger singleton implementation to be more in line with other implementations 2016-05-22 10:27:21 -06:00
David Sparer
083e71370f - Moved the startup debugging "program start" line from frmMain to Startup.cs
- Moved call to ParseCommandLineArgs() from frmMain to Startup.cs
2016-05-22 10:15:55 -06:00
David Sparer
0278390279 Moved method "CreatePanels" from Startup.cs to LayoutSettingsLoader.cs 2016-05-22 10:14:00 -06:00
David Sparer
f344ef054f - Removed unnecessary using directive
- Made many methods in Startup private and non-static
2016-05-22 10:05:11 -06:00
David Sparer
68e3953bcc Made Startup a singleton 2016-05-22 09:58:27 -06:00
David Sparer
7755a5cd9a Removed Runtime.Mainform property and replaced all references to frmMain.Default 2016-05-22 09:43:53 -06:00
Sean Kaim
05a7fec4c4 convert to singleton 2016-05-21 14:39:45 -04:00
Sean Kaim
8f0e15db85 code cleanup 2016-05-20 21:43:11 -04:00
Sean Kaim
b7dc56fef5 Disable VS hosting process
PuTTYNG windows don't integrate properly when it's enabled.
2016-05-20 21:23:48 -04:00
Sean Kaim
da14fb56fa code clean up 2016-05-20 21:19:45 -04:00
Sparer, David
b15e892c60 Removing all frmOptions unit tests since they are failing and polluting the view of our builds in Jenkins. There seems to be an issue with how the tests were structured that has now been broken since the frmOptions rewrite. 2016-05-20 12:53:51 -06:00
Sparer, David
eeeb13d094 Changed the singleton instance implementation in SupportedCultures to be safer. This resolves one of the reasons the UI unit tests are failing. 2016-05-20 12:42:34 -06:00
Sean Kaim
03cb3cd161 update credits.txt 2016-05-20 11:46:05 -04:00
Sean Kaim
f1b3558565 Use latest log4net.dll 2016-05-20 11:44:46 -04:00
Sean Kaim
6a69725ca9 Update CREDITS.TXT 2016-05-20 09:51:48 -04:00
Sean Kaim
63fdabd902 minitabcontrol.dll is no longer used 2016-05-20 09:49:45 -04:00
Sean Kaim
d624f04cde pstaskdialog.dll is no longer used 2016-05-20 09:48:07 -04:00
Sean Kaim
ba08c7d589 no need to ship the PDB with release code 2016-05-20 09:47:24 -04:00
Sean Kaim
35d072f550 Additional code clean up 2016-05-19 16:21:54 -04:00
Sean Kaim
4c28eebbdf Merge remote-tracking branch 'origin/develop' into develop
# Conflicts:
#	mRemoteV1/App/Runtime.cs
2016-05-19 16:13:05 -04:00
Sean Kaim
3ca0e2fc58 Refactoring & code clean up
Corrects some complier warnings.
2016-05-19 15:58:38 -04:00
Sparer, David
7450b22130 Cleaned up a bit more noise in Runtime.cs 2016-05-19 13:17:45 -06:00
Sparer, David
e39faaa550 Cleaned up some code noise in Runtime.cs (mostly just unnecessarily qualified namespaces) 2016-05-19 12:38:18 -06:00
Sean Kaim
ccde45acc9 Better fix for SettingsPath location 2016-05-19 14:18:49 -04:00
hiriumi
6b1c5b5b92 Merge branch 'develop' of https://github.com/mRemoteNG/mRemoteNG.git 2016-05-19 08:48:05 -07:00
hiriumi
e6af5aaea3 Removing OptionsForm as it's replaced by frmOptions. Removed unreference method in Windows class along with it. Also modified the unit test. 2016-05-19 08:47:50 -07:00
Sean Kaim
a792c98630 3G port-Avoid exceptions starting an empty ExtApp
Reference: https://github.com/kmscode/mRemote3G/issues/10

In my testing the crash was semi-random. The exception was thrown,
logged and put into Notifications (all as expected). But every now and
then, would crash (with no further info available). Could not reproduce
in a debug build.

b248849428
2016-05-18 21:56:39 -04:00
Sean Kaim
46985ab39d code clean up and set RDP admin session properly
console is deprecated, admin is not.
2016-05-18 21:51:04 -04:00
Sean Kaim
28d882af7f 3G port - Added 1920x1080 resolution.
5a5c0c1e6b
2016-05-18 21:40:17 -04:00
Sean Kaim
9d6423e7d7 3G port (and fix) - Make Smart Size Work
Allow the Smart Size selection for RDP resolution to work properly (for
reals this time).

3f54842cc1

& code clean up.
2016-05-18 21:37:05 -04:00
Sean Kaim
0a88ae6a52 3G Port - Don't display items in the ToolStripMenu
Set disabled items to invisible when they aren't needed.

97d82f2b86
2016-05-18 21:15:34 -04:00
Sean Kaim
395741a502 Disable optimizations to allow LARGEADDRESSAWARE
Reference: https://msdn.microsoft.com/en-us/library/0zza0de8.aspx
.obj files produced with /GL will not be available to such linker
utilities as EDITBIN and DUMPBIN.
2016-05-18 21:08:32 -04:00
Sean Kaim
00dbbdf453 Port from 3G - Attempt to set a default icon
11fdc4fc28
2016-05-18 17:36:41 -04:00
Sean Kaim
77cf6202fe Port from 3G - Attempt to avoid crash
2f99c57eb6
2016-05-18 17:31:30 -04:00
Sean Kaim
7ed00bb42d Port from 3G - avoid crash and default icon
c917f35352
2016-05-18 17:26:22 -04:00
Sean Kaim
b97fe50958 Put log in more appropriate location
ad create log by default
2016-05-18 17:13:59 -04:00
Sean Kaim
0501d73e7b Set largeaddressaware during build 2016-05-18 17:02:09 -04:00
Sean Kaim
8abe2bffb8 Use CredSSP needs to be true for modern targets
Just about all modern versions of Windows require CredSSP by default.
Set that one back to "Yes".
2016-05-18 16:36:54 -04:00
Sean Kaim
8477625472 Changed some default settings to avoid hangs
Multiple users reported that having "Cahse Bitmaps" and/or "Use CredSSP"
set to yes (which was the previous default) would cause problems with
mRemoteNG - especially when opening multiple RDP connections.

Also increased update check to 14 days.
2016-05-18 16:32:19 -04:00
Sparer, David
08851a2b7a Merge branch 'MR-810_App_crashes_when_setting_all_inherited' into csharp_conv 2016-05-18 11:17:53 -06:00
Sparer, David
d4b9ccf1c2 - Unit tests: Fixed tests for ConnectionInfoInheritance 2016-05-18 11:16:48 -06:00
Sparer, David
7b177f1fd8 Fixed bug MR-810. Omit setting the IsDefault setting when turning inheritance on completely 2016-05-18 09:42:26 -06:00
Sparer, David
7d6e814745 minor code noise cleanup 2016-05-18 09:08:54 -06:00
Sean Kaim
3cfb6ecf6f Clean up files that are no longer needed
"My Project" files are from the VB code.
SharedLibraryNG was removed - see commit:
71254ba6e2
2016-05-18 10:22:50 -04:00
Sean Kaim
11085a0037 PuTTYNG.exe 0.67 for the installer 2016-05-18 09:02:19 -04:00
David Sparer
a679bcf26b - Installer: fixed GUID for mainexe
- mRemoteNG: incremented the minor version of the product to 74. Assembly version is now 1.74
2016-05-17 19:51:49 -06:00
David Sparer
8ed1764fb3 added puttyng.exe dependency back in - this is required and im not sure how it slipped by 2016-05-17 19:03:51 -06:00
David Sparer
b2696003f0 The installer will now utilize the file version attribute of the mRemoteNG.exe file and set the installer version to match. This will help us support major upgrades easier 2016-05-17 19:03:07 -06:00
David Sparer
bc818704df Removed Pandoc from the gitignore since it is part of the build process now 2016-05-17 17:37:55 -06:00
Sparer, David
d21f3c1bcf Merge branch 'MR-818_Create_new_installer' into csharp_conv 2016-05-17 15:17:24 -06:00
Sparer, David
e6ae513474 - Add CustomActions project as a dependency of Installer project 2016-05-17 15:16:34 -06:00
Sparer, David
4360f45ab8 - Custom action for checking if RDP8.0 is installed will only run on Win7 machines
- Re-ordered conditional checks. Installer will warn about .Net version before warning about RDP 8.0 requirement. This more logically follows the "broad to specific" ordering of requirements
2016-05-17 13:50:20 -06:00
Sparer, David
74ef73ebf4 The RDP8.0 custom action project now targets .Net 2.0 for maximum compatibility. 2016-05-17 13:47:10 -06:00
Sparer, David
35b512de19 RDP 8.0 verification is working and now enabled.
Checking for the installed KBs is unusually time-intensive. Should try to optimize the runtime of this verification.
2016-05-17 13:44:19 -06:00
Sparer, David
a5966592e1 update gitignore 2016-05-16 16:11:25 -06:00
Sparer, David
8e2e1769c3 Started creating the custom action for checking if RDP 8.0 is installed. Currently not working correctly 2016-05-16 16:10:53 -06:00
hiriumi
19da883e14 Removed dependency on Microsoft.VisualBasic in Import.cs 2016-05-16 08:22:37 -07:00
hiriumi
600d5f4475 comming the 2016-05-16 08:14:51 -07:00
hiriumi
0e0e3b28de Removed dependency to Microsoft.VisualBasic in Import.cs 2016-05-16 08:11:15 -07:00
Sparer, David
2439ae0508 Merge branch 'csharp_conv' into MR-818_Create_new_installer 2016-05-16 08:07:30 -06:00
Sean Kaim
f9633cb860 Fix non-portable build 2016-05-15 20:54:49 -04:00
David Sparer
2c43f35b0b Added required variables to the other localization files.
Set the debug build configuration to only build the en-US culture for sanity's sake
2016-05-15 15:24:15 -06:00
Sean Kaim
a1beff754c Suppress JavaScript errors 2016-05-15 17:24:11 -04:00
Sean Kaim
647fa12cdc Support additional browser features
ported from mRemote3G:

11a1f94e97
2016-05-15 17:18:03 -04:00
Sean Kaim
725235c250 Fix HTTP connections not working & code cleanup 2016-05-15 17:17:14 -04:00
David Sparer
25d438d691 Links to the License, Credits, and Readme are now created when user requests start menu shortcuts. 2016-05-15 15:14:44 -06:00
David Sparer
37232b5302 Added install conditions:
- Requires Win7 or higher
- If Win7, requires SP1
- Requires .Net Framework 4.0 or higher
- Requires elevated priveleges to install
2016-05-15 15:13:40 -06:00
David Sparer
2d250282ee Added localization files for the languages we will be able to have translated the soonest 2016-05-15 13:09:19 -06:00
Sean Kaim
18e1c112e0 Correct unit tests after keyboard options removed 2016-05-15 14:06:16 -04:00
Sean Kaim
32891e5155 Remove KeyboardOptions tests
Keyboard options removed in 71254ba6e2
2016-05-15 13:57:40 -04:00
Sean Kaim
ef7cbf097b Merge pull request #111 from mRemoteNG/replace_pstaskdialog
Replace pstaskdialog
2016-05-15 13:51:39 -04:00
David Sparer
41ab8033e7 began the slow process of supporting localizations 2016-05-15 07:52:14 -06:00
David Sparer
4f392690eb Added pandoc to automatically convert the license file to RTF format for use in the installer.
Added GUI to installer with mRemoteNG images
Added git ignore entries for the FilesFragment.wsx and License.rtf files which will be re-compiled on every build
2016-05-14 18:12:21 -06:00
David Sparer
d591e4ebc2 added .msi files to the git ignore file 2016-05-14 15:36:28 -06:00
David Sparer
a315c19ebb Merge branch 'csharp_conv' into MR-818_Create_new_installer
# Conflicts:
#	mRemoteV1.sln
2016-05-14 15:35:31 -06:00
David Sparer
764b956221 Added installer support for installing PuTTYNG 2016-05-14 13:57:53 -06:00
David Sparer
f0b0086ca5 Installer now properly places shortcuts in start menu and the desktop.
Updated the program icon to a higher resolution version.
2016-05-14 12:33:52 -06:00
David Sparer
8c43494c03 Added support for creating shortcuts to start menu and desktop. However, the desktop shortcut is not functioning as expected 2016-05-14 11:53:53 -06:00
amaterasu48
634df366bd Removed PSTaskDialog.dll reference added pure .NET Form that mimics PSTaskDialog. No more dependency to it, so we shouldn't see the unexpected error. 2016-05-12 14:59:39 -07:00
Sparer, David
86585feb56 no message 2016-05-12 15:20:56 -06:00
Sparer, David
f4335ff339 updates to support the Portable build types 2016-05-12 15:10:15 -06:00
Sparer, David
61100d167f Accidentatly moved an icon file rather than copying. Put it back. 2016-05-12 14:19:59 -06:00
Sparer, David
77c7ba3194 Installer works in a very basic manner. Files will be installed as expected, though there is no GUI to select options 2016-05-12 14:14:39 -06:00
Sean Kaim
669e3a762b Removed PSTaskDialog instances & code cleanup 2016-05-12 15:08:55 -04:00
Sean Kaim
71254ba6e2 Remove Keyboard shortcut functionality
Removed due to the following reasons:
1. Crashes (semi-regularly)
2. "Beta" option from 1.73 (never released) that doesn't work (on
Windows 10 at least)
3. A multiple bugs were reported for it in the bug tracking system:
https://mremoteng.atlassian.net/browse/MR-714
https://mremoteng.atlassian.net/browse/MR-624
https://mremoteng.atlassian.net/browse/MR-687
https://mremoteng.atlassian.net/browse/MR-752
(and possibly more)
4. After reviewing the bug reports and other info, I feel it's a bad
idea. All keyboard input should go to the connected session (while
"active"). Otherwise a mouse click would be required to have mRemote be
the active Window. In which case, just click the desired tab.
2016-05-12 11:59:13 -04:00
David Sparer
8e7fe19585 Create very simple WiX project 2016-05-11 20:43:06 -06:00
David Sparer
95f605ea9d moved old installer to a new folder 2016-05-11 20:41:18 -06:00
amaterasu48
19d0e5d42f A little bit of UI clean up. 2016-05-11 15:50:09 -07:00
amaterasu48
5433a69775 Refactored and cleaned up frmMain 2016-05-11 14:41:34 -07:00
amaterasu48
f2ac6dace6 Just did refactoring and code cleaning to make it more CSharpy. 2016-05-11 12:49:48 -07:00
David Sparer
028889f9ec set default values for window position (center of screen) and size (minimum size allowed by frmMain) 2016-05-10 18:14:23 -06:00
David Sparer
f0c3395c00 Updated namespace of Resources and Language classes. The namespace was set in the designer but the custom tool needed to be run again to update the actual files. 2016-05-10 18:06:33 -06:00
David Sparer
ee180440e0 Merge branch 'settings_refactor' into csharp_conv 2016-05-10 16:53:16 -06:00
Sparer, David
4eac00c0d9 Resolved a mis-merged file 2016-05-09 10:58:49 -06:00
Sean Kaim
8e15b38e03 Set Code Analysis to MS Managed Recommended
Previously was set to "All" which generates a lot of complier warnings.

15e297eef3 seems to have been overwritten.
2016-05-09 09:42:15 -04:00
hiriumi
61e44af487 Merge remote-tracking branch 'refs/remotes/origin/csharp_conv' into settings_refactor
# Conflicts:
#	mRemoteV1/Config/Settings/SettingsLoader.cs
2016-05-08 22:27:54 -07:00
hiriumi
605fecedea Refactored config related code. 2016-05-08 21:53:41 -07:00
hiriumi
ac1a5e257e refactored settings related code. The UI still looks buggy. Will continue later. 2016-05-08 21:35:38 -07:00
Sean Kaim
401ac0225f Merge pull request #110 from mRemoteNG/settings_refactor
Settings refactor
2016-05-08 22:26:41 -04:00
Sean Kaim
dbda032a4c Disable AppSettingsProvider code as well
And an easier way to disable all custom settings provider code, but
leave it for possible/quicker future use.
2016-05-08 21:32:38 -04:00
David Sparer
b60b55dca2 property needed to be "Configuration" not "config" 2016-05-08 16:29:46 -06:00
David Sparer
e3229f4400 escaped double quotes 2016-05-08 13:15:51 -06:00
David Sparer
34435b3046 added new stage for Debug Portable build profile 2016-05-08 13:14:00 -06:00
David Sparer
1077d8ef4b Decided on commenting out the CreatePanels() / SetDefaultLayout() in frmMain rather than in LayoutSettingsLoader.
If we keep these methods in frmMain and remove in LayoutSettingsLoader, we will overwrite any custom layout loaded.
2016-05-08 12:43:57 -06:00
hiriumi
9527780d99 Removed dependency to PortableSettingsProvider.cs. This prevents app from throwing a lot of NullReferenceException on start up. I will do further testing on settings piece and probably more refactoring. 2016-05-08 11:40:30 -07:00
David Sparer
9878b39571 LayoutSettingsLoader: fix variable name for non-portable build 2016-05-08 12:23:05 -06:00
David Sparer
34f0b54284 Quick update+fix to SettingsLoader and forgot to update teh csproj 2016-05-08 12:09:22 -06:00
David Sparer
49d8aa7352 Extracted some responsibilities of the SettingsLoader to dedicated classes
Also cleaned some minor code noise in SettingsLoader
2016-05-08 12:03:36 -06:00
David Sparer
3ad6246e68 minor cleanup for Windows.cs 2016-05-08 10:30:16 -06:00
David Sparer
66eccf0032 some minor cleanup and local var renaming in ConnectionList.cs 2016-05-08 10:07:11 -06:00
David Sparer
995daecaff Merge branch 'MR-385_inheritance_settings_lost' into csharp_conv
# Conflicts:
#	mRemoteV1/App/Runtime.cs
#	mRemoteV1/Container/ContainerInfo.cs
2016-05-07 21:43:34 -06:00
Sean Kaim
1757c141fe Settings file changes
change from .config to .settings
Set UpdateAddress to an Application property, not a user property.
2016-05-07 22:31:02 -04:00
David Sparer
45b3f3d56f fixed issue described in MR-385
also made some refactoring changes in a quest to make the code more readable
2016-05-07 17:59:23 -06:00
Sean Kaim
b758b053d5 Added AppSettingsProvider (for non-portable builds) 2016-05-07 17:34:29 -04:00
Sean Kaim
7a3088d553 Fixed a number of complier warnings 2016-05-07 16:47:47 -04:00
Sean Kaim
15e297eef3 Set Code Analysis to MS Managed Recommended
Previously was set to "All" which generates a lot of complier warnings.
2016-05-07 16:26:55 -04:00
Sean Kaim
9476ba6578 target x86 / fixes complier warnings 2016-05-06 22:04:02 -04:00
Sean Kaim
a532120662 fix complier warning 2016-05-06 21:58:29 -04:00
David Sparer
b33f1a988c extracted the code for moving treenodes into its own class 2016-05-06 19:13:00 -06:00
David Sparer
24663a1944 forgot to build to update the csproj file after refactor 2016-05-06 18:29:10 -06:00
David Sparer
983ce80703 massive cleanup of code noise and renamed a few classes for clarity 2016-05-06 18:09:32 -06:00
David Sparer
4f3dbaa7ff Merge branch 'csharp_conv' into MR-385_inheritance_settings_lost 2016-05-06 17:38:00 -06:00
David Sparer
0c93614423 Revert "MR-808 intentionally broke build to test something in Jenkins"
This reverts commit 2060b19e92.
2016-05-06 17:07:21 -06:00
David Sparer
2060b19e92 MR-808 intentionally broke build to test something in Jenkins 2016-05-06 15:54:43 -06:00
David Sparer
cc3fc47cc3 did a bit of extra cleanup for MR-808 2016-05-06 15:42:53 -06:00
David Sparer
dd81a6ea91 Resolved issue by utilizing the correct object cast 2016-05-06 15:24:31 -06:00
Sparer, David
95f59ffb1b Merge branch 'csharp_conv' into MR-385_inheritance_settings_lost 2016-05-06 11:39:37 -06:00
Sparer, David
eaf1eaaee3 removing unit test that hangs 2016-05-06 11:35:35 -06:00
Sparer, David
2ebccbe372 fixed a small bug with the branch name regex 2016-05-06 11:32:06 -06:00
Sparer, David
adc49e61e7 adding Jenkinsfile to branch to enable automatic builds within Jenkins 2016-05-06 11:08:51 -06:00
Sparer, David
58142e70af updated Contributors section. also just pushing this to test jenkins webhooks 2016-05-04 08:51:19 -06:00
David Sparer
bae61f58af Merge pull request #109 from sparerd/MR-385_Inheritance_settings_lost
migrating branch to official repo
2016-05-03 09:24:59 -06:00
Kaim, Sean M
f7ac538f1d prevent exception at startup 2016-05-03 00:02:30 -04:00
Kaim, Sean M
8196e61a2c last fix to ensure loading correct settings file 2016-05-02 23:54:25 -04:00
Kaim, Sean M
403983ac6b addl fix to ensure loading correct settings file 2016-05-02 22:41:14 -04:00
Sean Kaim
f3e2f495d3 Merge pull request #108 from sparerd/csharp_conversion
Initial pull from fork into main repo
2016-05-02 22:02:16 -04:00
Sparer, David
78f7ded7a8 Merge branch 'csharp_conversion' into MR-385_Inheritance_settings_lost 2016-05-02 14:52:29 -06:00
Kaim, Sean M
053d59153e Fix portable settings path and remove some VB calls 2016-05-02 16:09:13 -04:00
Kaim, Sean M
84d849da4c Fix NullReferenceExceptions
Introduced in commit 63e0cd198c
Also performed some code cleanup
2016-05-02 15:58:38 -04:00
Sparer, David
90eba686c7 Quick refactor of the methods for retrieving ConnectionInfo properties (including inherited properties). 2016-05-02 11:50:17 -06:00
hiriumi
5a4d53908d A lof refactoring. There is a problem in PortableSettingsProvider.cs where it doesn't save the config file. We need to address PortableSettingsProvider.SetPropertyValues() method that saves the config file is not called at all. 2016-05-02 00:43:28 -07:00
hiriumi
e76dd18962 Refactoring to make the code more CSharpy and resolving more namespace issues. 2016-05-01 19:41:06 -07:00
hiriumi
071c4537ee Removed Microsoft.VisualBasic reference 2016-05-01 19:01:38 -07:00
hiriumi
e4e92c8b21 Did some refactoring to get some classes in the right namespace and some other adjustment. 2016-05-01 18:37:32 -07:00
hiriumi
43a54cdc76 Merge branch 'csharp_conversion' of https://github.com/mRemoteNG/mRemoteNG.git 2016-05-01 11:06:12 -07:00
hiriumi
c88ad088c0 Jira Item 714. I'm supressing the error to prevent the KeyboardHook from crashing the whole application. I'm not sure if this is the right away, so please review the code.
https://mremoteng.atlassian.net/browse/MR-714
2016-05-01 10:43:05 -07:00
Sean Kaim
f462340ac8 Merge pull request #6 from mRemoteNG/kmscode_rpd_v8
RDP version 8 Client & code clean up
2016-04-29 17:06:18 -04:00
Kaim, Sean M
b0cef15fa2 RDP version 8 Client & code clean up 2016-04-29 17:05:25 -04:00
Sean Kaim
160b0101a9 Merge pull request #3 from mRemoteNG/kmcode_csharp_conv
Remove WTS Sessions panel
2016-04-29 15:16:25 -04:00
Kaim, Sean M
63e0cd198c Correct errors for non-portable build 2016-04-29 12:22:19 -04:00
Kaim, Sean M
8a601b4d00 remove bin and obj files 2016-04-29 11:55:09 -04:00
Kaim, Sean M
ff81202d8a Remove bin and obj files 2016-04-29 11:54:20 -04:00
Kaim, Sean M
eed8df7391 Remove WTS Sessions Panel 2016-04-29 11:47:59 -04:00
Kaim, Sean M
12df1caead Remove WTS Sessions panel 2016-04-29 11:47:35 -04:00
Kaim, Sean M
15a7565cfb Update gitignore 2016-04-29 11:13:33 -04:00
Kaim, Sean M
38f17b05c2 update gitignore 2016-04-29 11:07:23 -04:00
Kaim, Sean M
d4e81daee3 Remove Unused References 2016-04-29 10:59:30 -04:00
Kaim, Sean M
143724f146 update gitignore 2016-04-29 10:54:49 -04:00
hiriumi
a3223d2f01 Fixed options forms. Namespaces are also corrected as well. 2016-04-26 22:52:24 -07:00
David Sparer
9520fbe4a1 re-adding some files lost during the migraton from sparerd/mRemoteNG-1 2016-04-14 01:27:15 -06:00
David Sparer
91bce23a5a Merge pull request #1 from sparerd/c#conversion
C#conversion
2016-04-13 23:06:35 -06:00
Sparer, David
b39b367ef2 absolute mess, but decided on a Strategy pattern for choosing connection protocols 2016-03-16 15:41:24 -06:00
Sparer, David
97736b19cd refactoring Connections subsystem 2016-03-15 15:45:45 -06:00
Sparer, David
a5c6fc9bed Revert "began rewrite of Theme subsystem"
This reverts commit a68bbc7950.
2016-03-15 08:00:07 -06:00
David Sparer
a68bbc7950 began rewrite of Theme subsystem 2016-03-13 21:34:09 -06:00
Sparer, David
40941a3b22 fixes 2016-03-11 12:58:19 -07:00
David Sparer
7ea6902b87 fixes 2016-03-10 18:43:16 -07:00
Sparer, David
7c74d447bc runtime and conversion fixes 2016-03-10 15:35:09 -07:00
Sparer, David
a937d5c4f7 runtime fixes 2016-03-09 15:44:41 -07:00
Sparer, David
2f90496a6e more fixes and cleanup 2016-03-08 15:43:29 -07:00
David Sparer
36fa99cef0 fixes 2016-03-07 18:14:31 -07:00
Sparer, David
eadbb1672f more fixes 2016-03-07 15:41:02 -07:00
David Sparer
eb7fad1054 more fixes 2016-03-06 18:24:44 -07:00
David Sparer
b4b7dc667f more fixes 2016-03-06 18:03:06 -07:00
David Sparer
8fe56722a5 more syntax fixes 2016-03-04 18:10:17 -07:00
Sparer, David
7dfc0643d5 more syntax fixes 2016-03-04 12:49:19 -07:00
David Sparer
b3c2fa1770 more syntax fixing 2016-03-03 19:12:11 -07:00
Sparer, David
4303c452e1 who knows 2016-03-03 15:45:53 -07:00
Sparer, David
6b4f2d3e18 more conversion updates 2016-03-03 15:44:51 -07:00
Sparer, David
f8dfc3c652 began converting project to c# 2016-03-01 15:04:05 -07:00
Sparer, David
21014f2e0e Added postbuild event to enable LargeAddressAware as a workaround for https://mremoteng.atlassian.net/browse/MR-582 2016-02-17 11:39:34 -07:00
603 changed files with 148390 additions and 45880 deletions

271
.gitignore vendored
View File

@@ -1,16 +1,13 @@
Release/
mRemoteV1/bin/
mRemoteV1/obj/
mRemoteV1/publish/
**/bin/
**/obj/
**/[Rr]elease [Pp]ortable/
**/[Dd]ebug [Pp]ortable/
*.pfx
*.suo
*.vbproj.user
Thumbs.db
[Dd]ebug/
_Re[Ss]harper.*
*.resharper
*.resharper.user
*.suo
*.cache
*~
*.swp
@@ -24,3 +21,261 @@ UpgradeLog.XML
*.sdf
*.opensdf
*.ipch
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# DNX
project.lock.json
artifacts/
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignoreable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.pfx
*.publishsettings
node_modules/
orleans.codegen.cs
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
*.mdf
*.ldf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# JetBrains Rider
.idea/
*.sln.iml
*.msi
Installer/Resources/License.rtf
Installer/Fragments/FilesFragment.wxs
Installer Projects/Installer/Resources/License.rtf
Installer Projects/Installer/Fragments/FilesFragment.wxs

View File

@@ -12,6 +12,9 @@ Riley McArdle
Apisitt Rattana
Andreas Rehm
David Vidmar
David Sparer
Hayato Iriumi
Sean Kaim
Translators
@@ -40,6 +43,10 @@ Hotkey Selection Control for .NET
Copyright <20> 2006 Thomas Backman
http://www.codeproject.com/Articles/15085/A-simple-hotkey-selection-control-for-NET
IP TextBox
Copyright <20> 2005 mawnkay
http://www.codeproject.com/Articles/11576/IP-TextBox
Included Components
===================
@@ -59,10 +66,6 @@ Copyright
MIT License
http://sourceforge.net/projects/dockpanelsuite/
Emergent OnLine WTSCOM 2.0.6.0
Copyright <20> 2001-2003 Emergent OnLine
http://www.go-eol.com/
FilteredPropertyGrid 1.0.0.0
Copyright <20> 2006 Azuria
http://www.codeproject.com/KB/cs/FilteredPropertyGrid.aspx
@@ -72,13 +75,8 @@ Copyright
Mozilla Public License 1.1
http://www.geckofx.org/
IPTextBox 1.1
Copyright <20> 2006 Matthew Kleinwaks
Copyright <20> 2008 Felix Deimel
http://www.vbforums.com/showthread.php?t=430169
log4net 1.2.10.0
Copyright <20> 2001-2006 The Apache Software Foundation
log4net 1.2.15.0
Copyright <20> 2001-2015 The Apache Software Foundation
Apache License Version 2.0
http://logging.apache.org/log4net/
@@ -96,12 +94,8 @@ MiniGeckoBrowser 1.0
Copyright <20> 2008 Felix Deimel
http://www.appjuice.org/
MiniTabControl 1.0
Copyright <20> 2008 Felix Deimel
http://www.appjuice.org/
PuTTY 0.62
Copyright <20> 1997-2011 Simon Tatham
PuTTY 0.67
Copyright <20> 1997-2016 Simon Tatham
MIT License
http://www.chiark.greenend.org.uk/~sgtatham/putty/
@@ -116,11 +110,6 @@ Copyright
Creative Commons Attribution 2.5 License
http://www.famfamfam.com/
Vista TaskDialog Wrapper and Emulator 1.0
Copyright <20> 2007-2009 Hedley Muscroft
Code Project Open License (CPOL)
http://www.codeproject.com/KB/vista/Vista_TaskDialog_Wrapper.aspx
VncSharp 1.0
Copyright <20> 2004-2009 David Humphrey
GNU General Public License (GPL) Version 2

View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<!--
Use supportedRuntime tags to explicitly specify the version(s) of the .NET Framework runtime that
the custom action should run on. If no versions are specified, the chosen version of the runtime
will be the "best" match to what Microsoft.Deployment.WindowsInstaller.dll was built against.
WARNING: leaving the version unspecified is dangerous as it introduces a risk of compatibility
problems with future versions of the .NET Framework runtime. It is highly recommended that you specify
only the version(s) of the .NET Framework runtime that you have tested against.
Note for .NET Framework v3.0 and v3.5, the runtime version is still v2.0.
In order to enable .NET Framework version 2.0 runtime activation policy, which is to load all assemblies
by using the latest supported runtime, @useLegacyV2RuntimeActivationPolicy="true".
For more information, see http://msdn.microsoft.com/en-us/library/bbx34a2h.aspx
-->
<supportedRuntime version="v4.0" />
<supportedRuntime version="v2.0.50727"/>
</startup>
<!--
Add additional configuration settings here. For more information on application config files,
see http://msdn.microsoft.com/en-us/library/kza1yk3a.aspx
-->
</configuration>

View File

@@ -0,0 +1,60 @@
using Microsoft.Deployment.WindowsInstaller;
namespace CustomActions
{
public class CustomActions
{
[CustomAction]
public static ActionResult IsKBInstalled(Session session)
{
session.Log("Begin IsKBInstalled");
string kb = session["KB"];
session.Log("Checking if '{0}' is installed", kb);
InstalledWindowsUpdateGatherer updateGatherer = new InstalledWindowsUpdateGatherer();
bool isUpdateInstalled = updateGatherer.IsUpdateInstalled(kb);
session.Log("KB is installed = '{0}'", isUpdateInstalled);
if (isUpdateInstalled)
{
session[kb] = "1";
session.Log("Set property '{0}' to '1'", kb);
}
else
{
session[kb] = "0";
session.Log("Set property '{0}' to '0'", kb);
}
session.Log("End IsKBInstalled");
return ActionResult.Success;
}
[CustomAction]
public static ActionResult IsLegacyVersionInstalled(Session session)
{
session.Log("Begin IsLegacyVersionInstalled");
UninstallNSISVersions uninstaller = new UninstallNSISVersions();
if (uninstaller.IsLegacymRemoteNGInstalled())
{
session["LEGACYVERSIONINSTALLED"] = "1";
}
else
{
session["LEGACYVERSIONINSTALLED"] = "0";
}
session.Log("End IsLegacyVersionInstalled");
return ActionResult.Success;
}
[CustomAction]
public static ActionResult UninstallLegacyVersion(Session session)
{
session.Log("Begin UninstallLegacyVersion");
UninstallNSISVersions uninstaller = new UninstallNSISVersions();
string uninstallString = uninstaller.GetLegacyUninstallString();
uninstaller.UninstallLegacyVersion(true);
session.Log("End UninstallLegacyVersion");
return ActionResult.Success;
}
}
}

View File

@@ -2,18 +2,20 @@
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{0F615504-5F30-4CF2-8341-1DE7FEC95A23}</ProjectGuid>
<ProjectGuid>{5423D985-CB48-4344-B47F-E8C6D60C8B04}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>SharedLibraryNG</RootNamespace>
<AssemblyName>SharedLibraryNG</AssemblyName>
<RootNamespace>CustomActions</RootNamespace>
<AssemblyName>CustomActions</AssemblyName>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<WixCATargetsPath Condition=" '$(WixCATargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.CA.targets</WixCATargetsPath>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
@@ -22,7 +24,7 @@
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
@@ -30,26 +32,24 @@
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<StartupObject>
</StartupObject>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Management" />
<Reference Include="Microsoft.Deployment.WindowsInstaller">
<Private>True</Private>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="HotkeyControl.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="KeyboardHook.cs" />
<Compile Include="CustomActions.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Win32.cs" />
<Compile Include="InstalledWindowsUpdateGatherer.cs" />
<Compile Include="UninstallNSISVersions.cs" />
<Content Include="CustomAction.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<Import Project="$(WixCATargetsPath)" />
</Project>

View File

@@ -0,0 +1,54 @@
using System;
using System.Management;
using System.Collections;
namespace CustomActions
{
public class InstalledWindowsUpdateGatherer
{
private ManagementScope _managementScope;
private ManagementClass _managementClass;
public InstalledWindowsUpdateGatherer()
{
_managementScope = Connect();
_managementClass = new ManagementClass("Win32_QuickFixEngineering");
}
public ManagementScope Connect()
{
try
{
return new ManagementScope(@"root\cimv2");
}
catch (ManagementException e)
{
Console.WriteLine("Failed to connect", e.Message);
throw;
}
}
public ArrayList GetInstalledUpdates()
{
string query = "SELECT * FROM Win32_QuickFixEngineering";
ArrayList installedUpdates = new ArrayList();
ManagementObjectSearcher searcher = new ManagementObjectSearcher(_managementScope, new ObjectQuery(query));
foreach(ManagementObject queryObj in searcher.Get())
{
installedUpdates.Add(queryObj["HotFixID"]);
}
return installedUpdates;
}
public bool IsUpdateInstalled(string KB)
{
bool updateIsInstalled = false;
string query = string.Format("SELECT HotFixID FROM Win32_QuickFixEngineering WHERE HotFixID='{0}'", KB);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(_managementScope, new ObjectQuery(query));
if (searcher.Get().Count > 0)
updateIsInstalled = true;
return updateIsInstalled;
}
}
}

View File

@@ -0,0 +1,35 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("HotfixInstalled")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("HotfixInstalled")]
[assembly: AssemblyCopyright("Copyright © 2016")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("5423d985-cb48-4344-b47f-e8c6d60c8b04")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,81 @@
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Win32;
using System.Diagnostics;
using System.IO;
namespace CustomActions
{
public class UninstallNSISVersions
{
private const string REGISTRY_PATH = "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\mRemoteNG";
private const string REGISTRY_PATH_Wow6432 = "Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\mRemoteNG";
private RegistryKey _activeRegistryPath;
public UninstallNSISVersions()
{
GetLegacymRemoteNGRegistryKeyPath();
}
public void UninstallLegacyVersion(bool Silent = false)
{
if (!IsLegacymRemoteNGInstalled())
return;
string uninstallString = GetLegacyUninstallString();
string forceNonTempUninstaller = string.Format("_?={0}", uninstallString.Replace("Uninstall.exe", "").Replace(@"""", ""));
string silentUninstall = "";
if (Silent)
{
silentUninstall = "/S";
}
ProcessStartInfo processStartInfo = new ProcessStartInfo(uninstallString);
processStartInfo.UseShellExecute = true;
processStartInfo.Arguments = string.Format("{0} {1}", forceNonTempUninstaller, silentUninstall);
Process uninstallProcess = Process.Start(processStartInfo);
while (uninstallProcess.HasExited == false)
{
Debug.WriteLine("Waiting for uninstaller to exit");
}
}
public bool IsLegacymRemoteNGInstalled()
{
return (_activeRegistryPath != null);
}
public string GetLegacyUninstallString()
{
if (IsLegacymRemoteNGInstalled())
return _activeRegistryPath.GetValue("UninstallString").ToString();
return "";
}
private void GetLegacymRemoteNGRegistryKeyPath()
{
GetUninstallKeyPath();
GetUninstallKeyPath6432();
}
private void GetUninstallKeyPath()
{
try
{
_activeRegistryPath = Registry.LocalMachine.OpenSubKey(REGISTRY_PATH);
}
catch (Exception ex)
{ }
}
private void GetUninstallKeyPath6432()
{
try
{
_activeRegistryPath = Registry.LocalMachine.OpenSubKey(REGISTRY_PATH_Wow6432);
}
catch (Exception ex)
{ }
}
}
}

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<?include $(sys.CURRENTDIR)Includes\Config.wxi?>
<Fragment>
<CustomAction Id="SetRDP80KBValue" Return="check" Execute="immediate" Property="KB" Value="$(var.RDP80KB)" />
<CustomAction Id="CheckIfRDP80Installed" Return="check" Execute="immediate" BinaryKey="CustomActions.CA.dll" DllEntry="IsKBInstalled" />
</Fragment>
<Fragment>
<CustomAction Id="SetRDP81KBValue" Return="check" Execute="immediate" Property="KB" Value="$(var.RDP81KB)" />
<CustomAction Id="CheckIfRDP81Installed" Return="check" Execute="immediate" BinaryKey="CustomActions.CA.dll" DllEntry="IsKBInstalled" />
</Fragment>
</Wix>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<?include $(sys.CURRENTDIR)Includes\Config.wxi?>
<Fragment>
<CustomAction Id="CheckIfLegacyVersionInstalled" Return="check" Execute="immediate" BinaryKey="CustomActions.CA.dll" DllEntry="IsLegacyVersionInstalled" />
</Fragment>
<Fragment>
<CustomAction Id="UninstallLegacyVersion" Return="check" Execute="immediate" BinaryKey="CustomActions.CA.dll" DllEntry="UninstallLegacyVersion" />
</Fragment>
</Wix>

Binary file not shown.

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wix="http://schemas.microsoft.com/wix/2006/wi">
<xsl:output method="xml" indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:key name="service-search" match="wix:Component[contains(wix:File/@Source, '.pdb')]" use="@Id" />
<xsl:key name="service-search" match="wix:Component[contains(wix:File/@Source, '.xml')]" use="@Id" />
<xsl:key name="service-search" match="wix:Component[contains(wix:File/@Source, 'app.config')]" use="@Id" />
<xsl:key name="service-search" match="wix:Component[contains(wix:File/@Source, 'vshost')]" use="@Id" />
<xsl:key name="service-search" match="wix:Component[contains(wix:File/@Source, 'manifest')]" use="@Id" />
<xsl:key name="service-search" match="wix:Component[contains(wix:File/@Source, '.application')]" use="@Id" />
<xsl:key name="service-search" match="wix:Component[wix:File/@Source = '$(var.HarvestPath)\mRemoteNG.exe']" use="@Id" />
<xsl:template match="wix:Component[key('service-search', @Id)]" />
<xsl:template match="wix:ComponentRef[key('service-search', @Id)]" />
</xsl:stylesheet>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<?include $(sys.CURRENTDIR)Includes\Config.wxi?>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="$(var.PlatformProgramFilesFolder)">
<Directory Id="APPLICATIONROOTDIRECTORY" Name="$(var.ProductName)" />
</Directory>
<Directory Id="DesktopFolder" Name="!(loc.Folders_Desktop)" />
<Directory Id="ProgramMenuFolder">
<Directory Id="ApplicationProgramsFolder" Name="$(var.ProductName)"/>
</Directory>
</Directory>
</Fragment>
</Wix>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<?include $(sys.CURRENTDIR)Includes\Config.wxi?>
<Fragment>
<Component Id="C.MainExe" Directory="APPLICATIONROOTDIRECTORY" Guid="*">
<File Id="MainExeFile" Source="$(var.SolutionDir)mRemoteV1\bin\$(var.Configuration)\mRemoteNG.exe" />
</Component>
</Fragment>
</Wix>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<ComponentGroup Id="CG.ProjectInfoFiles" Directory="APPLICATIONROOTDIRECTORY">
<Component Id="C.Changelog" Guid="*">
<File Id="ChangelogFile" Name="Changelog.txt" Source="$(var.SolutionDir)CHANGELOG.TXT" KeyPath="yes" />
</Component>
<Component Id="C.Credits" Guid="*">
<File Id="CreditsFile" Name="Credits.txt" Source="$(var.SolutionDir)CREDITS.TXT" KeyPath="yes" />
</Component>
<Component Id="C.License" Guid="*">
<File Id="LicenseFile" Name="License.txt" Source="$(var.SolutionDir)COPYING.TXT" KeyPath="yes" />
</Component>
<Component Id="C.Readme" Guid="*">
<File Id="ReadmeFile" Name="Readme.txt" Source="$(var.SolutionDir)README.TXT" KeyPath="yes" />
</Component>
</ComponentGroup>
</Fragment>
</Wix>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="APPLICATIONROOTDIRECTORY">
<Component Id="C.PuttyNGFile" Guid="*">
<File Id="PuttyNGFile" Name="PuTTYNG.exe" Source="Dependencies\PuTTYNG.exe" KeyPath="yes" />
</Component>
</DirectoryRef>
</Fragment>
</Wix>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<?include $(sys.CURRENTDIR)Includes\Config.wxi?>
<Fragment Id="Fr.Shortcuts">
<DirectoryRef Id="DesktopFolder">
<Component Id="C.DesktopShortcut" Guid="F78E5A16-A2F7-4BD9-9250-CBF3016CCCDA">
<Shortcut Id="DesktopShortcut" Name="$(var.ProductName)" Target="[APPLICATIONROOTDIRECTORY][MAINEXE]" WorkingDirectory="APPLICATIONROOTDIRECTORY" Icon="mRemoteNG.ico" />
<RegistryValue Root="HKCU" Key="Software\$(var.ProductName)" Name="DesktopShortcut" Type="integer" Value="1" KeyPath="yes" />
</Component>
</DirectoryRef>
<DirectoryRef Id="ApplicationProgramsFolder">
<Component Id="C.ApplicationStartMenuShortcut" Guid="193B9E14-F40E-44F1-8514-BED253BCBF75">
<Shortcut Id="ApplicationStartMenuShortcut" Name="$(var.ProductName)" Target="[APPLICATIONROOTDIRECTORY][MAINEXE]" WorkingDirectory="APPLICATIONROOTDIRECTORY" Icon="mRemoteNG.ico" />
<Shortcut Id="CreditsShortcut" Name="Credits" Target="[APPLICATIONROOTDIRECTORY]Credits.txt" WorkingDirectory="APPLICATIONROOTDIRECTORY" />
<Shortcut Id="LicenseShortcut" Name="License" Target="[APPLICATIONROOTDIRECTORY]License.txt" WorkingDirectory="APPLICATIONROOTDIRECTORY" />
<Shortcut Id="ReadmeShortcut" Name="Readme" Target="[APPLICATIONROOTDIRECTORY]Readme.txt" WorkingDirectory="APPLICATIONROOTDIRECTORY" />
<RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/>
<RegistryValue Root="HKCU" Key="Software\$(var.ProductName)" Name="ApplicationStartMenuShortcut" Type="integer" Value="1" KeyPath="yes"/>
</Component>
</DirectoryRef>
</Fragment>
</Wix>

View File

@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<Include>
<?define ProductName = "mRemoteNG" ?>
<?define Company = "Next Generation Software" ?>
<?define UpgradeCode = "dd678a54-ca75-4791-8dfe-d818095684f8" ?>
<?define ProductCode = "*" ?>
<?define ProductVersion = "!(bind.FileVersion.MainExeFile)" ?>
<?define MajorVersion = "!(bind.property.ProductVersion.Major)" ?>
<?define MinorVersion = "!(bind.property.ProductVersion.Minor)" ?>
<?define BuildVersion = "!(bind.property.ProductVersion.Build)" ?>
<?define RevisionVersion = "!(bind.property.ProductVersion.Revision)" ?>
<?define ProductLanguage = 1033 ?>
<?define ExeProcessName = "$(var.ProductName).exe" ?>
<?define RequiredDotNetFrameworkMajorVersion = "4" ?>
<?define RequiredDotNetFrameworkMinorVersion = "0" ?>
<?define RequiredDotNetFrameworkServicePackLevel = "" ?>
<?define RequiredDotNetFrameworkVersion = "$(var.RequiredDotNetFrameworkMajorVersion).$(var.RequiredDotNetFrameworkMinorVersion)" ?>
<?define RDP80KB = "KB2592687" ?>
<?define RDP81KB = "KB2923545" ?>
<?if $(var.Platform) = x64 ?>
<?define ProductNameWithPlatform = "$(var.ProductName) (64 bit)" ?>
<?define Win64 = "yes" ?>
<?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
<?else ?>
<?define ProductNameWithPlatform = "$(var.ProductName)" ?>
<?define Win64 = "no" ?>
<?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
<?endif ?>
</Include>

View File

@@ -0,0 +1,119 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>3.10</ProductVersion>
<ProjectGuid>f0168b9f-6815-40df-ba53-46cee7683b68</ProjectGuid>
<SchemaVersion>2.0</SchemaVersion>
<OutputName>mRemoteNG-Installer</OutputName>
<OutputType>Package</OutputType>
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
<OutputPath>bin\$(Configuration)\</OutputPath>
<IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DefineConstants>HarvestPath=..\mRemoteV1\bin\Debug;</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<DefineConstants>HarvestPath=..\mRemoteV1\bin\Release;</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug Portable' ">
<DefineConstants>HarvestPath=..\mRemoteV1\bin\Debug Portable;</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release Portable' ">
<DefineConstants>HarvestPath=..\mRemoteV1\bin\Release Portable;</DefineConstants>
</PropertyGroup>
<ItemGroup>
<Compile Include="CustomActions\CheckForInstalledWindowsUpdates.wxs" />
<Compile Include="CustomActions\UninstallLegacyVersions.wxs" />
<Compile Include="Fragments\FilesFragment.wxs" />
<Compile Include="Fragments\DirectoriesFragment.wxs" />
<Compile Include="Fragments\MainExeFragment.wxs" />
<Compile Include="Fragments\MiscTextFilesFragment.wxs" />
<Compile Include="Fragments\PuTTYNGFragment.wxs" />
<Compile Include="Fragments\ShortcutFragment.wxs" />
<Compile Include="mRemoteNGV1.wxs" />
</ItemGroup>
<ItemGroup>
<Content Include="Dependencies\PuTTYNG.exe">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Filters\Harvest_Filter.xslt" />
<Content Include="Includes\Config.wxi" />
<Content Include="Resources\header.bmp" />
<Content Include="Resources\License.rtf" />
<Content Include="Resources\mRemoteNG.ico" />
<Content Include="Resources\welcome.bmp" />
</ItemGroup>
<ItemGroup>
<Folder Include="CustomActions" />
<Folder Include="CustomDialogs" />
<Folder Include="Fragments" />
<Folder Include="Includes" />
<Folder Include="Localizations" />
<Folder Include="Filters" />
<Folder Include="bin" />
<Folder Include="Dependencies" />
<Folder Include="Resources" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Localizations\ru-RU.wxl" />
<EmbeddedResource Include="Localizations\ja-JP.wxl" />
<EmbeddedResource Include="Localizations\cs-CZ.wxl" />
<EmbeddedResource Include="Localizations\de-DE.wxl" />
<EmbeddedResource Include="Localizations\en-US.wxl" />
</ItemGroup>
<ItemGroup>
<WixExtension Include="WixUIExtension">
<HintPath>$(WixExtDir)\WixUIExtension.dll</HintPath>
<Name>WixUIExtension</Name>
</WixExtension>
<WixExtension Include="WixNetFxExtension">
<HintPath>$(WixExtDir)\WixNetFxExtension.dll</HintPath>
<Name>WixNetFxExtension</Name>
</WixExtension>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\mRemoteV1\mRemoteV1.csproj">
<Name>mRemoteV1</Name>
<Project>{4934a491-40bc-4e5b-9166-ea1169a220f6}</Project>
<Private>True</Private>
<DoNotHarvest>
</DoNotHarvest>
<RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>
<RefTargetDir>APPLICATIONROOTDIRECTORY</RefTargetDir>
</ProjectReference>
</ItemGroup>
<Import Project="$(WixTargetsPath)" />
<!--
To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Wix.targets.
-->
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<LinkerAdditionalOptions>
</LinkerAdditionalOptions>
<DefineConstants>HarvestPath=$(SolutionDir)mRemoteV1\bin\Release;</DefineConstants>
</PropertyGroup>
<PropertyGroup>
<PreBuildEvent>REM Harvest bin directory of the mRemoteV1 project
call "$(WIX)bin\heat.exe" dir "$(SolutionDir)mRemoteV1\bin\$(Configuration)" -ag -dr APPLICATIONROOTDIRECTORY -var var.HarvestPath -srd -cg MandatoryComponents -template fragment -out "$(ProjectDir)Fragments\FilesFragment.wxs" -t "$(ProjectDir)Filters\Harvest_Filter.xslt" -v
REM Convert the license file "COPYING.TXT" to "License.rtf" to be shown in the installer GUI
call "$(ProjectDir)Resources\Pandoc\pandoc.exe" -s -t rtf -o "$(ProjectDir)\Resources\License.rtf" "$(SolutionDir)COPYING.TXT"</PreBuildEvent>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<Cultures>en-US</Cultures>
<DefineConstants>HarvestPath=$(SolutionDir)mRemoteV1\bin\Debug;</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug Portable|x86' ">
<DefineConstants>HarvestPath=$(SolutionDir)mRemoteV1\bin\Debug Portable;</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release Portable|x86' ">
<DefineConstants>HarvestPath=$(SolutionDir)mRemoteV1\bin\Release Portable;</DefineConstants>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Culture="cs-CZ" Language="1029" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<!-- Install Conditions -->
<String Id="Upgrade_NewerVersionInstalled" Overridable="yes">A newer version of [ProductName] is already installed.</String>
<String Id="Install_NeedToBeAdminToInstall">You need to be an administrator to install this product.</String>
<String Id="Install_NeedDotNetFrameworkVersion">mRemoteNG requires Microsoft .NET Framework $(var.RequiredDotNetFrameworkVersion).</String>
<String Id="Install_OSVersionRequirement">mRemoteNG requires Windows 7 SP1 or higher to run. Please update your operating system and try again.</String>
<String Id="Install_RDP80Requirement">mRemoteNG requires RDP 8.0 or higher to run. Windows 7 users will need to install KB2592687</String>
<String Id="Install_Win7RequiresSP1">For mRemoteNG to run on Windows 7, it requires Service Pack 1 to be installed. Please install Service Pack 1 and try again.</String>
<!-- Directories and File names -->
<String Id="Folders_Desktop">Desktop</String>
<String Id="File_Credits">Credits</String>
<String Id="File_License">License</String>
<String Id="File_VersionHistory">Version History</String>
<!-- Features and install options -->
<String Id="Feature_Complete">Complete</String>
<String Id="Feature_DesktopShortcut">Desktop Shortcut</String>
<String Id="Feature_StartMenuShortcut">Start menu shortcut</String>
<!-- GUI Page Text -->
<String Id="FinishPage_LaunchMremoteNow" Overridable="yes">Launch [ProductName] Now</String>
</WixLocalization>

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Culture="de-DE" Language="1031" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<!-- Install Conditions -->
<String Id="Upgrade_NewerVersionInstalled" Overridable="yes">A newer version of [ProductName] is already installed.</String>
<String Id="Install_NeedToBeAdminToInstall">You need to be an administrator to install this product.</String>
<String Id="Install_NeedDotNetFrameworkVersion">mRemoteNG requires Microsoft .NET Framework $(var.RequiredDotNetFrameworkVersion).</String>
<String Id="Install_OSVersionRequirement">mRemoteNG requires Windows 7 SP1 or higher to run. Please update your operating system and try again.</String>
<String Id="Install_RDP80Requirement">mRemoteNG requires RDP 8.0 or higher to run. Windows 7 users will need to install KB2592687</String>
<String Id="Install_Win7RequiresSP1">For mRemoteNG to run on Windows 7, it requires Service Pack 1 to be installed. Please install Service Pack 1 and try again.</String>
<!-- Directories and File names -->
<String Id="Folders_Desktop">Desktop</String>
<String Id="File_Credits">Credits</String>
<String Id="File_License">License</String>
<String Id="File_VersionHistory">Version History</String>
<!-- Features and install options -->
<String Id="Feature_Complete">Complete</String>
<String Id="Feature_DesktopShortcut">Desktop Shortcut</String>
<String Id="Feature_StartMenuShortcut">Start menu shortcut</String>
<!-- GUI Page Text -->
<String Id="FinishPage_LaunchMremoteNow" Overridable="yes">mRemoteNG jetzt Starten</String>
</WixLocalization>

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Culture="en-US" Language="1033" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<!-- Install Conditions -->
<String Id="Upgrade_NewerVersionInstalled" Overridable="yes">A newer version of [ProductName] is already installed.</String>
<String Id="Install_NeedToBeAdminToInstall">You need to be an administrator to install this product.</String>
<String Id="Install_NeedDotNetFrameworkVersion">mRemoteNG requires Microsoft .NET Framework [REQUIREDDOTNETFRAMEWORKVERSION] or higher.</String>
<String Id="Install_OSVersionRequirement">mRemoteNG requires Windows 7 SP1 or higher to run. Please update your operating system and try again.</String>
<String Id="Install_RDP80Requirement">mRemoteNG requires RDP 8.0 or higher to run. Windows 7 users will need to install KB2592687</String>
<String Id="Install_Win7RequiresSP1">For mRemoteNG to run on Windows 7, it requires Service Pack 1 to be installed. Please install Service Pack 1 and try again.</String>
<!-- Directories and File names -->
<String Id="Folders_Desktop">Desktop</String>
<String Id="File_Credits">Credits</String>
<String Id="File_License">License</String>
<String Id="File_VersionHistory">Version History</String>
<!-- Features and install options -->
<String Id="Feature_Complete">Complete</String>
<String Id="Feature_DesktopShortcut">Desktop Shortcut</String>
<String Id="Feature_StartMenuShortcut">Start menu shortcut</String>
<!-- GUI Page Text -->
<String Id="FinishPage_LaunchMremoteNow" Overridable="yes">Launch [ProductName] Now</String>
</WixLocalization>

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Culture="ja-JP" Language="1041" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<!-- Install Conditions -->
<String Id="Upgrade_NewerVersionInstalled" Overridable="yes">A newer version of [ProductName] is already installed.</String>
<String Id="Install_NeedToBeAdminToInstall">You need to be an administrator to install this product.</String>
<String Id="Install_NeedDotNetFrameworkVersion">mRemoteNG requires Microsoft .NET Framework $(var.RequiredDotNetFrameworkVersion).</String>
<String Id="Install_OSVersionRequirement">mRemoteNG requires Windows 7 SP1 or higher to run. Please update your operating system and try again.</String>
<String Id="Install_RDP80Requirement">mRemoteNG requires RDP 8.0 or higher to run. Windows 7 users will need to install KB2592687</String>
<String Id="Install_Win7RequiresSP1">For mRemoteNG to run on Windows 7, it requires Service Pack 1 to be installed. Please install Service Pack 1 and try again.</String>
<!-- Directories and File names -->
<String Id="Folders_Desktop">Desktop</String>
<String Id="File_Credits">Credits</String>
<String Id="File_License">License</String>
<String Id="File_VersionHistory">Version History</String>
<!-- Features and install options -->
<String Id="Feature_Complete">Complete</String>
<String Id="Feature_DesktopShortcut">Desktop Shortcut</String>
<String Id="Feature_StartMenuShortcut">Start menu shortcut</String>
<!-- GUI Page Text -->
<String Id="FinishPage_LaunchMremoteNow" Overridable="yes">Launch [ProductName] Now</String>
</WixLocalization>

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Culture="ru-RU" Language="1049" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<!-- Install Conditions -->
<String Id="Upgrade_NewerVersionInstalled" Overridable="yes">A newer version of [ProductName] is already installed.</String>
<String Id="Install_NeedToBeAdminToInstall">You need to be an administrator to install this product.</String>
<String Id="Install_NeedDotNetFrameworkVersion">mRemoteNG requires Microsoft .NET Framework $(var.RequiredDotNetFrameworkVersion).</String>
<String Id="Install_OSVersionRequirement">mRemoteNG requires Windows 7 SP1 or higher to run. Please update your operating system and try again.</String>
<String Id="Install_RDP80Requirement">mRemoteNG requires RDP 8.0 or higher to run. Windows 7 users will need to install KB2592687</String>
<String Id="Install_Win7RequiresSP1">For mRemoteNG to run on Windows 7, it requires Service Pack 1 to be installed. Please install Service Pack 1 and try again.</String>
<!-- Directories and File names -->
<String Id="Folders_Desktop">Desktop</String>
<String Id="File_Credits">Credits</String>
<String Id="File_License">License</String>
<String Id="File_VersionHistory">Version History</String>
<!-- Features and install options -->
<String Id="Feature_Complete">Complete</String>
<String Id="Feature_DesktopShortcut">Desktop Shortcut</String>
<String Id="Feature_StartMenuShortcut">Start menu shortcut</String>
<!-- GUI Page Text -->
<String Id="FinishPage_LaunchMremoteNow" Overridable="yes">Launch [ProductName] Now</String>
</WixLocalization>

View File

@@ -0,0 +1,85 @@
{\rtf1\ansi\deff0{\fonttbl{\f0 \fswiss Helvetica;}{\f1 Courier;}}
{\colortbl;\red255\green0\blue0;\red0\green0\blue255;}
\widowctrl\hyphauto
{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs36 GNU GENERAL PUBLIC LICENSE\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Version 2, June 1991\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Copyright (C) 1989, 1991 Free Software Foundation, Inc.\line 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs32 Preamble\par}
{\pard \ql \f0 \sa180 \li0 \fi0 The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software\u8211-to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation\u8217's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Also, for each author\u8217's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors\u8217' reputations.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone\u8217's free use or not licensed at all.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 The precise terms and conditions for copying, distribution and modification follow.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs32 GNU GENERAL PUBLIC LICENSE\par}
{\pard \ql \f0 \sa180 \li0 \fi0 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 0.\tx360\tab This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The \u8220"Program\u8221", below, refers to any such program or work, and a \u8220"work based on the Program\u8221" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term \u8220"modification\u8221".) Each licensee is addressed as \u8220"you\u8221".\par}
{\pard \ql \f0 \sa180 \li360 \fi0 Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 1.\tx360\tab You may copy and distribute verbatim copies of the Program\u8217's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.\par}
{\pard \ql \f0 \sa180 \li360 \fi0 You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 2.\tx360\tab You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:\par}
{\pard \ql \f0 \sa180 \li720 \fi-360 a)\tx360\tab You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.\par}
{\pard \ql \f0 \sa180 \li720 \fi-360 b)\tx360\tab You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.\par}
{\pard \ql \f0 \sa180 \li720 \fi-360 c)\tx360\tab If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)\sa180\par}
{\pard \ql \f0 \sa180 \li360 \fi0 These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.\par}
{\pard \ql \f0 \sa180 \li360 \fi0 Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.\par}
{\pard \ql \f0 \sa180 \li360 \fi0 In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 3.\tx360\tab You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:\par}
{\pard \ql \f0 \sa180 \li720 \fi-360 a)\tx360\tab Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,\par}
{\pard \ql \f0 \sa180 \li720 \fi-360 b)\tx360\tab Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,\par}
{\pard \ql \f0 \sa180 \li720 \fi-360 c)\tx360\tab Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)\sa180\par}
{\pard \ql \f0 \sa180 \li360 \fi0 The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.\par}
{\pard \ql \f0 \sa180 \li360 \fi0 If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 4.\tx360\tab You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 5.\tx360\tab You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 6.\tx360\tab Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients\u8217' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 7.\tx360\tab If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.\par}
{\pard \ql \f0 \sa180 \li360 \fi0 If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.\par}
{\pard \ql \f0 \sa180 \li360 \fi0 It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.\par}
{\pard \ql \f0 \sa180 \li360 \fi0 This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 8.\tx360\tab If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 9.\tx360\tab The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.\par}
{\pard \ql \f0 \sa180 \li360 \fi0 Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and \u8220"any later version\u8221", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 10.\tx360\tab If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 NO WARRANTY\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 11.\tx360\tab BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \u8220"AS IS\u8221" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 12.\tx360\tab IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 END OF TERMS AND CONDITIONS\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs32 How to Apply These Terms to Your New Programs\par}
{\pard \ql \f0 \sa180 \li0 \fi0 If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the \u8220"copyright\u8221" line and a pointer to where the full notice is found.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \f1 <one line to give the program's name and a brief idea of what it does.>\line
Copyright (C) <year> <name of author>\line
\line
This program is free software; you can redistribute it and/or modify\line
it under the terms of the GNU General Public License as published by\line
the Free Software Foundation; either version 2 of the License, or\line
(at your option) any later version.\line
\line
This program is distributed in the hope that it will be useful,\line
but WITHOUT ANY WARRANTY; without even the implied warranty of\line
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\line
GNU General Public License for more details.\line
\line
You should have received a copy of the GNU General Public License\line
along with this program; if not, write to the Free Software\line
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\par}
{\pard \ql \f0 \sa180 \li0 \fi0 Also add information on how to contact you by electronic and paper mail.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 If the program is interactive, make it output a short notice like this when it starts in an interactive mode:\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \f1 Gnomovision version 69, Copyright (C) year name of author\line
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\line
This is free software, and you are welcome to redistribute it\line
under certain conditions; type `show c' for details.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 The hypothetical commands {\f1 show w' and}show c\u8217' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than {\f1 show w' and}show c\u8217'; they could even be mouse-clicks or menu items\u8211-whatever suits your program.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 You should also get your employer (if you work as a programmer) or your school, if any, to sign a \u8220"copyright disclaimer\u8221" for the program, if necessary. Here is a sample; alter the names:\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \f1 Yoyodyne, Inc., hereby disclaims all copyright interest in the program\line
`Gnomovision' (which makes passes at compilers) written by James Hacker.\line
\line
<signature of Ty Coon>, 1 April 1989\line
Ty Coon, President of Vice\par}
{\pard \ql \f0 \sa180 \li0 \fi0 This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.\par}
}

View File

@@ -0,0 +1,108 @@
Pandoc
Copyright (C) 2006-2016 John MacFarlane <jgm at berkeley dot edu>
This code is released under the [GPL], version 2 or later:
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
The GNU General Public License is available in the file COPYING in
the source distribution. On Debian systems, the complete text of the
GPL can be found in `/usr/share/common-licenses/GPL`.
[GPL]: http://www.gnu.org/copyleft/gpl.html
Pandoc's complete source code is available from the [Pandoc home page].
[Pandoc home page]: http://pandoc.org
Pandoc includes some code from other authors. The copyright and license
statements for these sources are included below. All are GPL-compatible
licenses.
----------------------------------------------------------------------
src/Text/Pandoc/Writers/Texinfo.hs
Copyright (C) 2008-2015 John MacFarlane and Peter Wang
Released under the GNU General Public License version 2 or later.
----------------------------------------------------------------------
src/Text/Pandoc/Writers/OpenDocument.hs
Copyright (C) 2008-2015 Andrea Rossato and John MacFarlane
Released under the GNU General Public License version 2 or later.
----------------------------------------------------------------------
src/Text/Pandoc/Writers/Org.hs
Copyright (C) 2010-2015 Puneeth Chaganti and John MacFarlane
Released under the GNU General Public License version 2 or later.
----------------------------------------------------------------------
src/Text/Pandoc/Readers/Textile.hs
Copyright (C) 2010-2015 Paul Rivier and John MacFarlane
Released under the GNU General Public License version 2 or later.
----------------------------------------------------------------------
src/Text/Pandoc/Readers/Org.hs
tests/Tests/Readers/Org.hs
Copyright (C) 2014-2015 Albert Krewinkel
Released under the GNU General Public License version 2 or later.
----------------------------------------------------------------------
data/LaTeXMathML.js
Adapted by Jeff Knisely and Douglas Woodall from
ASCIIMathML.js v. 1.4.7
Copyright (C) 2005 Peter Jipsen
Released under the GNU General Public License version 2 or later.
----------------------------------------------------------------------
data/MathMLinHTML.js
Copyright (C) 2004 Peter Jipsen http://www.chapman.edu/~jipsen
Released under the GNU General Public License version 2 or later.
------------------------------------------------------------------------
The dzslides template contains javascript and CSS from Paul Rouget's
dzslides template.
http://github.com/paulrouget/dzslides
Released under the Do What the Fuck You Want To Public License.
------------------------------------------------------------------------
Pandoc embeds a lua interpreter (via hslua).
Copyright © 19942015 Lua.org, PUC-Rio.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 KiB

View File

@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
<?include $(sys.CURRENTDIR)Includes\Config.wxi?>
<Product Name="$(var.ProductNameWithPlatform)" Manufacturer="Next Generation Software"
Version="$(var.ProductVersion)"
Id="$(var.ProductCode)"
UpgradeCode="$(var.UpgradeCode)"
Language="1033">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="!(loc.Upgrade_NewerVersionInstalled)" Schedule="afterInstallExecute" />
<MediaTemplate EmbedCab="yes" />
<Binary Id="CustomActions.CA.dll" SourceFile="$(var.SolutionDir)Installer Projects\CustomActions\bin\$(var.Configuration)\CustomActions.CA.dll" />
<Property Id="ARPPRODUCTICON" Value="mRemoteNG.ico" />
<Property Id="ARPHELPLINK" Value="http://www.mremoteng.org" />
<Property Id="MAINEXE" Value="$(var.ExeProcessName)" />
<Property Id="APPLICATIONROOTDIRECTORY">
<RegistrySearch Id='mRemoteNGRegistry' Type='raw' Root='HKLM' Key='Software\mRemoteNG' Name='InstallDir' />
</Property>
<Property Id='REQUIREDDOTNETFRAMEWORKVERSION' Value='$(var.RequiredDotNetFrameworkVersion)' />
<Property Id='LEGACYVERSIONINSTALLED' Value='0' />
<PropertyRef Id="NETFRAMEWORK40FULL" />
<PropertyRef Id="WIX_IS_NETFRAMEWORK_40_OR_LATER_INSTALLED" />
<Icon Id="mRemoteNG.ico" SourceFile="Resources\mRemoteNG.ico" />
<InstallUISequence>
<Custom Action="SetRDP80KBValue" After="AppSearch" />
<Custom Action="CheckIfRDP80Installed" After="SetRDP80KBValue">(NOT Installed) AND (VersionNT = 601 OR VersionNT64 = 601)</Custom>
<LaunchConditions After="SetWIX_IS_NETFRAMEWORK_40_OR_LATER_INSTALLED" />
<Custom Action="CheckIfLegacyVersionInstalled" After="LaunchConditions" />
<Custom Action="UninstallLegacyVersion" After="CheckIfLegacyVersionInstalled">(NOT Installed) AND (LEGACYVERSIONINSTALLED = 1)</Custom>
</InstallUISequence>
<!-- Need to be admin to install -->
<Condition Message="!(loc.Install_NeedToBeAdminToInstall)">
Privileged
</Condition>
<!-- Windows 7 or higher required -->
<Condition Message="!(loc.Install_OSVersionRequirement)">
<![CDATA[Installed OR (VersionNT >= 601) OR (VersionNT64 >= 601)]]>
</Condition>
<!-- If Windows 7, SP 1 is required -->
<Condition Message="!(loc.Install_Win7RequiresSP1)">
<![CDATA[Installed OR (VersionNT >= 602 OR VersionNT64 >= 602) OR ((VersionNT = 601 OR VersionNT64 = 601) AND ServicePackLevel >= 1)]]>
</Condition>
<!-- .Net Framework Version Condition -->
<Condition Message="!(loc.Install_NeedDotNetFrameworkVersion)">
<![CDATA[Installed OR WIX_IS_NETFRAMEWORK_40_OR_LATER_INSTALLED = 1]]>
</Condition>
<!-- If Win7, require RDP 8.0 update (KB2592687) -->
<Condition Message="!(loc.Install_RDP80Requirement)">
<![CDATA[Installed OR (VersionNT >= 602 OR VersionNT64 >= 602) OR ((VersionNT = 601 OR VersionNT64 = 601) ]]>AND ($(var.RDP80KB) = 1 OR $(var.RDP81KB) = 1))
</Condition>
<Feature Id="F.Complete" Title="!(loc.Feature_Complete)" Display="expand" AllowAdvertise="no" Level="1">
<Feature Id="F.MinimalFeature" Title="$(var.ProductName)" Absent="disallow" ConfigurableDirectory="APPLICATIONROOTDIRECTORY" Level="1">
<ComponentGroupRef Id="MandatoryComponents" Primary="yes" />
<ComponentRef Id="C.MainExe" Primary="yes" />
<ComponentGroupRef Id="CG.ProjectInfoFiles" Primary="yes" />
</Feature>
<Feature Id="F.PuttyNG" Title="PuTTYNG" Absent="allow" AllowAdvertise="no" Level="1">
<ComponentRef Id="C.PuttyNGFile" Primary="yes" />
</Feature>
<Feature Id="F.DesktopShortcut" Title="!(loc.Feature_DesktopShortcut)" Absent="allow" AllowAdvertise="no" Level="1">
<ComponentRef Id="C.DesktopShortcut" Primary="yes" />
</Feature>
<Feature Id="F.ApplicationStartMenuShortcut" Title="!(loc.Feature_StartMenuShortcut)" Absent="allow" AllowAdvertise="no" Level="1">
<ComponentRef Id="C.ApplicationStartMenuShortcut" Primary="yes" />
</Feature>
</Feature>
<UIRef Id="WixUI_FeatureTree"/>
<WixVariable Id="WixUILicenseRtf" Value="Resources\License.rtf" />
<WixVariable Id="WixUIDialogBmp" Value="Resources\welcome.bmp" />
<WixVariable Id="WixUIBannerBmp" Value="Resources\header.bmp" />
</Product>
</Wix>

Binary file not shown.

44
Jenkinsfile vendored Normal file
View File

@@ -0,0 +1,44 @@
node('windows') {
def jobDir = pwd()
def vsToolsDir = "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\Tools"
def vsExtensionsDir = "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\IDE\\CommonExtensions\\Microsoft\\TestWindow"
stage 'Checkout Branch'
def gitUrl = "https://github.com/mRemoteNG/mRemoteNG.git"
def branchName = GetBranchName()
echo "BranchName: ${branchName}"
git([url: gitUrl, branch: branchName])
stage 'Build mRemoteNG (Normal)'
bat "\"${vsToolsDir}\\VsDevCmd.bat\" && msbuild.exe /nologo \"${jobDir}\\mRemoteV1.sln\""
stage 'Build mRemoteNG (Portable)'
bat "\"${vsToolsDir}\\VsDevCmd.bat\" && msbuild.exe /nologo /p:Configuration=\"Debug Portable\" \"${jobDir}\\mRemoteV1.sln\""
stage 'Run Unit Tests'
def nunitTestAdapterPath = "C:\\Users\\Administrator\\AppData\\Local\\Microsoft\\VisualStudio\\14.0\\Extensions"
bat "\"${vsToolsDir}\\VsDevCmd.bat\" && VSTest.Console.exe /TestAdapterPath:${nunitTestAdapterPath} \"${jobDir}\\mRemoteNGTests\\bin\\debug\\mRemoteNGTests.dll\""
}
def GetBranchName() {
def jobDir = pwd()
echo "JobDir: ${jobDir}"
def patternToUse = GetPatternToMatchBranchNameFromDirectory()
echo "PatternToUse: ${patternToUse}"
java.util.regex.Matcher matcher = jobDir =~ patternToUse
echo "Ran the matcher"
matcher ? matcher[0][1] : null
}
def GetPatternToMatchBranchNameFromDirectory() {
def patternToUse = ""
def folderSeparator = ""
def branchNamePattern = "[a-zA-Z0-9\\-_]*"
def jenkinsJobInfoTag = "@*[0-9]*"
echo "isUnix: ${isUnix()}"
if (isUnix()) {
folderSeparator = "/"
} else {
folderSeparator = "\\\\"
}
patternToUse = "${folderSeparator}(${branchNamePattern})(${jenkinsJobInfoTag})\$"
patternToUse
}

View File

@@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<TestSettings name="Local" id="2a25bb82-f5ff-4a67-b5e9-c6aaa54d1e80" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<Description>These are default test settings for a local test run.</Description>
<Deployment enabled="false" />
<Execution>
<TestTypeSpecific />
<AgentRule name="Execution Agents">
</AgentRule>
</Execution>
</TestSettings>

View File

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 78 KiB

View File

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 79 KiB

BIN
Old_Installer/header.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

View File

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 151 KiB

View File

@@ -1,331 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using System.Windows.Forms;
//
// Hotkey selection control, written by serenity@exscape.org, 2006-08-03
// Please mail me if you find a bug.
//
namespace SharedLibraryNG
{
/// <summary>
/// A simple control that allows the user to select pretty much any valid hotkey combination
/// </summary>
public class HotkeyControl : TextBox
{
private const string KeySeparator = " + ";
// These variables store the current hotkey and modifier(s)
private Keys _keyCode = Keys.None;
private Keys _modifiers = Keys.None;
// ArrayLists used to enforce the use of proper modifiers.
// Shift+A isn't a valid hotkey, for instance, as it would screw up when the user is typing.
private readonly ArrayList _needNonShiftModifier;
private readonly ArrayList _needNonAltGrModifier;
private readonly ContextMenu _emptyContextMenu = new ContextMenu();
/// <summary>
/// Used to make sure that there is no right-click menu available
/// </summary>
public override ContextMenu ContextMenu
{
get
{
return _emptyContextMenu;
}
// ReSharper disable once ValueParameterNotUsed
set
{
base.ContextMenu = _emptyContextMenu;
}
}
/// <summary>
/// Forces the control to be non-multiline
/// </summary>
public override bool Multiline
{
get
{
return base.Multiline;
}
// ReSharper disable once ValueParameterNotUsed
set
{
// Ignore what the user wants; force Multiline to false
base.Multiline = false;
}
}
/// <summary>
/// Creates a new HotkeyControl
/// </summary>
public HotkeyControl()
{
// Handle events that occurs when keys are pressed
KeyUp += HotkeyControl_KeyUp;
// Fill the ArrayLists that contain all invalid hotkey combinations
_needNonShiftModifier = new ArrayList();
_needNonAltGrModifier = new ArrayList();
PopulateModifierLists();
}
protected override void OnCreateControl()
{
base.OnCreateControl();
ContextMenu = _emptyContextMenu; // Disable right-clicking
Multiline = false;
Text = "None";
}
/// <summary>
/// Populates the ArrayLists specifying disallowed hotkeys
/// such as Shift+A, Ctrl+Alt+4 (would produce a dollar sign) etc
/// </summary>
private void PopulateModifierLists()
{
// Shift + 0 - 9, A - Z
for (var k = Keys.D0; k <= Keys.Z; k++)
_needNonShiftModifier.Add((int)k);
// Shift + Numpad keys
for (var k = Keys.NumPad0; k <= Keys.NumPad9; k++)
_needNonShiftModifier.Add((int)k);
// Shift + Misc (,;<./ etc)
for (var k = Keys.Oem1; k <= Keys.OemBackslash; k++)
_needNonShiftModifier.Add((int)k);
// Misc keys that we can't loop through
_needNonShiftModifier.Add((int)Keys.Insert);
_needNonShiftModifier.Add((int)Keys.Help);
_needNonShiftModifier.Add((int)Keys.Multiply);
_needNonShiftModifier.Add((int)Keys.Add);
_needNonShiftModifier.Add((int)Keys.Subtract);
_needNonShiftModifier.Add((int)Keys.Divide);
_needNonShiftModifier.Add((int)Keys.Decimal);
_needNonShiftModifier.Add((int)Keys.Return);
_needNonShiftModifier.Add((int)Keys.Escape);
_needNonShiftModifier.Add((int)Keys.NumLock);
_needNonShiftModifier.Add((int)Keys.Scroll);
_needNonShiftModifier.Add((int)Keys.Pause);
// Ctrl+Alt + 0 - 9
for (var k = Keys.D0; k <= Keys.D9; k++)
_needNonAltGrModifier.Add((int)k);
}
/// <summary>
/// Fires when all keys are released. If the current hotkey isn't valid, reset it.
/// Otherwise, do nothing and keep the text and hotkey as it was.
/// </summary>
void HotkeyControl_KeyUp(object sender, KeyEventArgs e)
{
if (_keyCode == Keys.None && ModifierKeys == Keys.None) ResetHotkey();
}
/// <summary>
/// Handles some misc keys, such as Ctrl+Delete and Shift+Insert
/// </summary>
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
var keyCode = keyData & Keys.KeyCode;
var modifiers = keyData & Keys.Modifiers;
if (keyData == Keys.Back || keyData == Keys.Delete)
{
ResetHotkey();
return true;
}
_keyCode = keyCode;
_modifiers = modifiers;
Redraw();
return true;
}
/// <summary>
/// Clears the current hotkey and resets the TextBox
/// </summary>
public void ResetHotkey()
{
_keyCode = Keys.None;
_modifiers = Keys.None;
Text = "None";
}
/// <summary>
/// Used to get/set the hotkey (e.g. Keys.A)
/// </summary>
public Keys KeyCode
{
get
{
return _keyCode;
}
set
{
_keyCode = value;
Redraw(false);
}
}
/// <summary>
/// Used to get/set the modifier keys (e.g. Keys.Alt | Keys.Control)
/// </summary>
public Keys HotkeyModifiers
{
get
{
return _modifiers;
}
set
{
_modifiers = value;
Redraw(false);
}
}
/// <summary>
/// Redraws the TextBox when necessary.
/// </summary>
/// <param name="validate">Specifies whether this function was called by the Hotkey/HotkeyModifiers properties or by the user.</param>
private void Redraw(bool validate = true)
{
// Only validate input if it comes from the user
if (validate)
{
// No modifier or shift only, AND a hotkey that needs another modifier
if ((_modifiers == Keys.Shift || _modifiers == Keys.None) &&
_needNonShiftModifier.Contains((int) _keyCode))
{
if (_modifiers == Keys.None)
{
// Set Ctrl+Alt as the modifier unless Ctrl+Alt+<key> won't work...
if (_needNonAltGrModifier.Contains((int) _keyCode) == false)
_modifiers = Keys.Alt | Keys.Control;
else // ... in that case, use Shift+Alt instead.
_modifiers = Keys.Alt | Keys.Shift;
}
else
{
// User pressed Shift and an invalid key (e.g. a letter or a number),
// that needs another set of modifier keys
_keyCode = Keys.None;
Text = _modifiers + " + Invalid Key";
return;
}
}
// Check all Ctrl+Alt keys
if ((_modifiers == (Keys.Alt | Keys.Control)) &&
_needNonAltGrModifier.Contains((int) _keyCode))
{
// Ctrl+Alt+4 etc won't work; reset hotkey and tell the user
_keyCode = Keys.None;
Text = _modifiers + " + Invalid Key";
return;
}
}
// Don't allow modifiers keys for _keyCode
if (_keyCode == Keys.ShiftKey ||
_keyCode == Keys.LShiftKey ||
_keyCode == Keys.RShiftKey ||
_keyCode == Keys.ControlKey ||
_keyCode == Keys.LControlKey ||
_keyCode == Keys.RControlKey ||
_keyCode == Keys.Menu ||
_keyCode == Keys.LMenu ||
_keyCode == Keys.RMenu ||
_keyCode == Keys.LWin ||
_keyCode == Keys.RWin)
_keyCode = Keys.None;
if (_modifiers == Keys.None)
{
if (_keyCode == Keys.None)
{
ResetHotkey();
return;
}
// We get here if we've got a hotkey that is valid without a modifier,
// like F1-F12, Media-keys etc.
Text = _keyCode.ToString();
return;
}
Text = string.Join(KeySeparator, new[] { KeysToString(_modifiers), KeysToString(_keyCode) });
}
public static string KeysToString(Keys keys)
{
if (keys == Keys.None) return "None";
var modifiers = (keys & Keys.Modifiers);
var keyCode = (keys & Keys.KeyCode);
var strings = new List<string>();
if (modifiers != 0)
{
var modifierStrings = new List<string>(modifiers.ToString().Replace(", ", ",").Split(','));
modifierStrings.Sort(new KeyModifierComparer());
strings.AddRange(modifierStrings);
}
if (keyCode != 0)
{
var keyString = keyCode.ToString();
var keyHashtable = new Dictionary<string, string>
{
{"Next", "PageDown"},
{"Oemcomma", ","},
{"OemMinus", "-"},
{"OemOpenBrackets", "["},
{"OemPeriod", "."},
{"Oemplus", "="},
{"OemQuestion", "/"},
{"Oemtilde", "`"},
{"D0", "0"},
{"D1", "1"},
{"D2", "2"},
{"D3", "3"},
{"D4", "4"},
{"D5", "5"},
{"D6", "6"},
{"D7", "7"},
{"D8", "8"},
{"D9", "9"},
};
if (keyHashtable.ContainsKey(keyString)) keyString = keyHashtable[keyString];
strings.Add(keyString);
}
return string.Join(KeySeparator, strings.ToArray());
}
private class KeyModifierComparer : IComparer<string>
{
private static readonly List<string> ModifierOrder = new List<string>
{
"control",
"alt",
"shift",
};
public int Compare(string x, string y)
{
var xIndex = ModifierOrder.IndexOf(x.ToLowerInvariant());
var yIndex = ModifierOrder.IndexOf(y.ToLowerInvariant());
return xIndex - yIndex;
}
}
}
}

View File

@@ -1,258 +0,0 @@
//
// Based on code from Stephen Toub's MSDN blog at
// http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx
//
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Collections.Generic;
namespace SharedLibraryNG
{
public class KeyboardHook
{
// ReSharper disable InconsistentNaming
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool PostMessage(IntPtr hWnd, Int32 Msg, IntPtr wParam, HookKeyMsgData lParam);
// ReSharper restore InconsistentNaming
[Flags]
public enum ModifierKeys
{
None = 0x0000,
Shift = 0x0001,
LeftShift = 0x002,
RightShift = 0x004,
Control = 0x0008,
LeftControl = 0x010,
RightControl = 0x20,
Alt = 0x0040,
LeftAlt = 0x0080,
RightAlt = 0x0100,
Win = 0x0200,
LeftWin = 0x0400,
RightWin = 0x0800,
}
protected class KeyNotificationEntry
: IEquatable<KeyNotificationEntry>
{
public IntPtr WindowHandle;
public Int32 KeyCode;
public ModifierKeys ModifierKeys;
public Boolean Block;
public bool Equals(KeyNotificationEntry obj)
{
return (WindowHandle == obj.WindowHandle &&
KeyCode == obj.KeyCode &&
ModifierKeys == obj.ModifierKeys &&
Block == obj.Block);
}
}
public const string HookKeyMsgName = "HOOKKEYMSG-{56BE0940-34DA-11E1-B308-C6714824019B}";
private static Int32 _hookKeyMsg;
public static Int32 HookKeyMsg
{
get
{
if (_hookKeyMsg == 0)
{
_hookKeyMsg = Win32.RegisterWindowMessage(HookKeyMsgName).ToInt32();
if (_hookKeyMsg == 0)
throw new Win32Exception(Marshal.GetLastWin32Error());
}
return _hookKeyMsg;
}
}
// this is a custom structure that will be passed to
// the requested hWnd via a WM_APP_HOOKKEYMSG message
[StructLayout(LayoutKind.Sequential)]
public class HookKeyMsgData
{
public Int32 KeyCode;
public ModifierKeys ModifierKeys;
public Boolean WasBlocked;
}
private static int _referenceCount;
private static IntPtr _hook;
private static readonly Win32.LowLevelKeyboardProcDelegate LowLevelKeyboardProcStaticDelegate = LowLevelKeyboardProc;
private static readonly List<KeyNotificationEntry> NotificationEntries = new List<KeyNotificationEntry>();
public KeyboardHook()
{
_referenceCount++;
SetHook();
}
~KeyboardHook()
{
_referenceCount--;
if (_referenceCount < 1) UnsetHook();
}
private static void SetHook()
{
if (_hook != IntPtr.Zero) return;
var curProcess = Process.GetCurrentProcess();
var curModule = curProcess.MainModule;
var hook = Win32.SetWindowsHookEx(Win32.WH_KEYBOARD_LL, LowLevelKeyboardProcStaticDelegate, Win32.GetModuleHandle(curModule.ModuleName), 0);
if (hook == IntPtr.Zero)
throw new Win32Exception(Marshal.GetLastWin32Error());
_hook = hook;
}
private static void UnsetHook()
{
if (_hook == IntPtr.Zero) return;
Win32.UnhookWindowsHookEx(_hook);
_hook = IntPtr.Zero;
}
private static IntPtr LowLevelKeyboardProc(Int32 nCode, IntPtr wParam, Win32.KBDLLHOOKSTRUCT lParam)
{
var wParamInt = wParam.ToInt32();
var result = 0;
if (nCode == Win32.HC_ACTION)
{
switch (wParamInt)
{
case Win32.WM_KEYDOWN:
case Win32.WM_SYSKEYDOWN:
case Win32.WM_KEYUP:
case Win32.WM_SYSKEYUP:
result = OnKey(wParamInt, lParam);
break;
}
}
if (result != 0) return new IntPtr(result);
return Win32.CallNextHookEx(_hook, nCode, wParam, lParam);
}
private static int OnKey(Int32 msg, Win32.KBDLLHOOKSTRUCT key)
{
var result = 0;
foreach (var notificationEntry in NotificationEntries)
if (GetFocusWindow() == notificationEntry.WindowHandle && notificationEntry.KeyCode == key.vkCode)
{
var modifierKeys = GetModifierKeyState();
if (!ModifierKeysMatch(notificationEntry.ModifierKeys, modifierKeys)) continue;
var wParam = new IntPtr(msg);
var lParam = new HookKeyMsgData
{
KeyCode = key.vkCode,
ModifierKeys = modifierKeys,
WasBlocked = notificationEntry.Block,
};
if (!PostMessage(notificationEntry.WindowHandle, HookKeyMsg, wParam, lParam))
throw new Win32Exception(Marshal.GetLastWin32Error());
if (notificationEntry.Block) result = 1;
}
return result;
}
private static IntPtr GetFocusWindow()
{
var guiThreadInfo = new Win32.GUITHREADINFO();
if (!Win32.GetGUIThreadInfo(0, guiThreadInfo))
throw new Win32Exception(Marshal.GetLastWin32Error());
return Win32.GetAncestor(guiThreadInfo.hwndFocus, Win32.GA_ROOT);
}
protected static Dictionary<Int32, ModifierKeys> ModifierKeyTable = new Dictionary<Int32, ModifierKeys>
{
{ Win32.VK_SHIFT, ModifierKeys.Shift },
{ Win32.VK_LSHIFT, ModifierKeys.LeftShift },
{ Win32.VK_RSHIFT, ModifierKeys.RightShift },
{ Win32.VK_CONTROL, ModifierKeys.Control },
{ Win32.VK_LCONTROL, ModifierKeys.LeftControl },
{ Win32.VK_RCONTROL, ModifierKeys.RightControl },
{ Win32.VK_MENU, ModifierKeys.Alt },
{ Win32.VK_LMENU, ModifierKeys.LeftAlt },
{ Win32.VK_RMENU, ModifierKeys.RightAlt },
{ Win32.VK_LWIN, ModifierKeys.LeftWin },
{ Win32.VK_RWIN, ModifierKeys.RightWin },
};
public static ModifierKeys GetModifierKeyState()
{
var modifierKeyState = ModifierKeys.None;
foreach (KeyValuePair<Int32, ModifierKeys> pair in ModifierKeyTable)
{
if ((Win32.GetAsyncKeyState(pair.Key) & Win32.KEYSTATE_PRESSED) != 0) modifierKeyState |= pair.Value;
}
if ((modifierKeyState & ModifierKeys.LeftWin) != 0) modifierKeyState |= ModifierKeys.Win;
if ((modifierKeyState & ModifierKeys.RightWin) != 0) modifierKeyState |= ModifierKeys.Win;
return modifierKeyState;
}
public static Boolean ModifierKeysMatch(ModifierKeys requestedKeys, ModifierKeys pressedKeys)
{
if ((requestedKeys & ModifierKeys.Shift) != 0) pressedKeys &= ~(ModifierKeys.LeftShift | ModifierKeys.RightShift);
if ((requestedKeys & ModifierKeys.Control) != 0) pressedKeys &= ~(ModifierKeys.LeftControl | ModifierKeys.RightControl);
if ((requestedKeys & ModifierKeys.Alt) != 0) pressedKeys &= ~(ModifierKeys.LeftAlt | ModifierKeys.RightAlt);
if ((requestedKeys & ModifierKeys.Win) != 0) pressedKeys &= ~(ModifierKeys.LeftWin | ModifierKeys.RightWin);
return requestedKeys == pressedKeys;
}
public static void RequestKeyNotification(IntPtr windowHandle, Int32 keyCode, Boolean block)
{
RequestKeyNotification(windowHandle, keyCode, ModifierKeys.None, block);
}
public static void RequestKeyNotification(IntPtr windowHandle, Int32 keyCode, ModifierKeys modifierKeys = ModifierKeys.None, Boolean block = false)
{
var newNotificationEntry = new KeyNotificationEntry
{
WindowHandle = windowHandle,
KeyCode = keyCode,
ModifierKeys = modifierKeys,
Block = block,
};
foreach (var notificationEntry in NotificationEntries)
if (notificationEntry == newNotificationEntry) return;
NotificationEntries.Add(newNotificationEntry);
}
public static void CancelKeyNotification(IntPtr windowHandle, Int32 keyCode, Boolean block)
{
CancelKeyNotification(windowHandle, keyCode, ModifierKeys.None, block);
}
public static void CancelKeyNotification(IntPtr windowHandle, Int32 keyCode, ModifierKeys modifierKeys = ModifierKeys.None, Boolean block = false)
{
var notificationEntry = new KeyNotificationEntry
{
WindowHandle = windowHandle,
KeyCode = keyCode,
ModifierKeys = modifierKeys,
Block = block,
};
NotificationEntries.Remove(notificationEntry);
}
}
}

View File

@@ -1,171 +0,0 @@
using System;
using System.Runtime.InteropServices;
namespace SharedLibraryNG
{
// ReSharper disable InconsistentNaming
public static class Win32
{
#region Functions
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProcDelegate lpfn, IntPtr hMod, Int32 dwThreadId);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool UnhookWindowsHookEx(IntPtr hhk);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, KBDLLHOOKSTRUCT lParam);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr GetModuleHandle(string lpModuleName);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr RegisterWindowMessage(string lpString);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetGUIThreadInfo(Int32 idThread, GUITHREADINFO lpgui);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr GetAncestor(IntPtr hwnd, UInt32 gaFlags);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern Int16 GetAsyncKeyState(Int32 vKey);
#endregion
#region Delegates
public delegate IntPtr LowLevelKeyboardProcDelegate(Int32 nCode, IntPtr wParam, KBDLLHOOKSTRUCT lParam);
#endregion
#region Structures
[StructLayout(LayoutKind.Sequential)]
public class KBDLLHOOKSTRUCT
{
public Int32 vkCode;
public Int32 scanCode;
public Int32 flags;
public Int32 time;
public IntPtr dwExtraInfo;
};
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}
[StructLayout(LayoutKind.Sequential)]
public class GUITHREADINFO
{
public GUITHREADINFO()
{
cbSize = Convert.ToInt32(Marshal.SizeOf(this));
}
public Int32 cbSize;
public Int32 flags;
public IntPtr hwndActive;
public IntPtr hwndFocus;
public IntPtr hwndCapture;
public IntPtr hwndMenuOwner;
public IntPtr hwndMoveSize;
public IntPtr hwndCaret;
public RECT rcCaret;
}
#endregion
#region Constants
// GetAncestor
public const int GA_ROOT = 2;
// SetWindowsHookEx
public const int WH_KEYBOARD_LL = 13;
// LowLevelKeyboardProcDelegate
public const int HC_ACTION = 0;
// SendMessage
public const int WM_KEYDOWN = 0x0100;
public const int WM_KEYUP = 0x0101;
public const int WM_SYSKEYDOWN = 0x0104;
public const int WM_SYSKEYUP = 0x0105;
// GetAsyncKeyState
public const int KEYSTATE_PRESSED = 0x8000;
#region Virtual Keys
public const int VK_CANCEL = 0x0003;
public const int VK_BACK = 0x0008;
public const int VK_TAB = 0x0009;
public const int VK_CLEAR = 0x000C;
public const int VK_RETURN = 0x000D;
public const int VK_PAUSE = 0x0013;
public const int VK_ESCAPE = 0x001B;
public const int VK_SNAPSHOT = 0x002C;
public const int VK_INSERT = 0x002D;
public const int VK_DELETE = 0x002E;
public const int VK_HOME = 0x0024;
public const int VK_END = 0x0023;
public const int VK_PRIOR = 0x0021;
public const int VK_NEXT = 0x0022;
public const int VK_LEFT = 0x0025;
public const int VK_UP = 0x0026;
public const int VK_RIGHT = 0x0027;
public const int VK_DOWN = 0x0028;
public const int VK_SELECT = 0x0029;
public const int VK_PRINT = 0x002A;
public const int VK_EXECUTE = 0x002B;
public const int VK_HELP = 0x002F;
public const int VK_LWIN = 0x005B;
public const int VK_RWIN = 0x005C;
public const int VK_APPS = 0x005D;
public const int VK_F1 = 0x0070;
public const int VK_F2 = 0x0071;
public const int VK_F3 = 0x0072;
public const int VK_F4 = 0x0073;
public const int VK_F5 = 0x0074;
public const int VK_F6 = 0x0075;
public const int VK_F7 = 0x0076;
public const int VK_F8 = 0x0077;
public const int VK_F9 = 0x0078;
public const int VK_F10 = 0x0079;
public const int VK_F11 = 0x007A;
public const int VK_F12 = 0x007B;
public const int VK_SHIFT = 0x0010;
public const int VK_LSHIFT = 0x00A0;
public const int VK_RSHIFT = 0x00A1;
public const int VK_CONTROL = 0x0011;
public const int VK_LCONTROL = 0x00A2;
public const int VK_RCONTROL = 0x00A3;
public const int VK_MENU = 0x0012;
public const int VK_LMENU = 0x00A4;
public const int VK_RMENU = 0x00A5;
public const int VK_OEM_1 = 0x00BA;
public const int VK_OEM_2 = 0x00BF;
public const int VK_OEM_3 = 0x00C0;
public const int VK_OEM_4 = 0x00DB;
public const int VK_OEM_5 = 0x00DC;
public const int VK_OEM_6 = 0x00DD;
public const int VK_OEM_7 = 0x00DE;
public const int VK_OEM_8 = 0x00DF;
public const int VK_OEM_102 = 0x00E2;
#endregion
#endregion
// ReSharper restore InconsistentNaming
}
}

View File

@@ -1,145 +0,0 @@
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Imports mRemoteNG.Tools
Imports mRemoteNG.Connection.PuttySession
'''<summary>
'''This is a test class for ExternalToolTest and is intended
'''to contain all ExternalToolTest Unit Tests
'''</summary>
<TestClass()> _
Public Class ExternalToolTest
'''<summary>
'''Gets or sets the test context which provides
'''information about and functionality for the current test run.
'''</summary>
Public Property TestContext() As TestContext
#Region "Additional test attributes"
'
'You can use the following additional attributes as you write your tests:
'
'Use ClassInitialize to run code before running the first test in the class
'<ClassInitialize()> _
'Public Shared Sub MyClassInitialize(ByVal testContext As TestContext)
'End Sub
'
'Use ClassCleanup to run code after all tests in a class have run
'<ClassCleanup()> _
'Public Shared Sub MyClassCleanup()
'End Sub
'
'Use TestInitialize to run code before running each test
'<TestInitialize()> _
'Public Sub MyTestInitialize()
'End Sub
'
'Use TestCleanup to run code after each test has run
'<TestCleanup()> _
'Public Sub MyTestCleanup()
'End Sub
'
#End Region
'''<summary>
'''A test for ParseArguments
'''</summary>
<TestMethod(), _
DeploymentItem("mRemoteNG.exe")> _
Public Sub ParseArgumentsTest()
Dim externalTool As New ExternalTool
' ReSharper disable StringLiteralTypo
externalTool.ConnectionInfo = New Info()
With externalTool.ConnectionInfo
.Name = "EMAN"
.Hostname = "EMANTSOH"
.Port = 9876
.Username = "EMANRESU"
.Password = "DROWSSAP"
.Domain = "NIAMOD"
.Description = "NOITPIRCSED"
.MacAddress = "SSERDDACAM"
.UserField = "DLEIFRESU"
End With
Assert.AreEqual("EMAN, EMANTSOH, 9876, EMANRESU, DROWSSAP, NIAMOD, NOITPIRCSED, SSERDDACAM, DLEIFRESU", externalTool.ParseArguments("%NAME%, %HOSTNAME%, %PORT%, %USERNAME%, %PASSWORD%, %DOMAIN%, %DESCRIPTION%, %MACADDRESS%, %USERFIELD%"))
' ReSharper restore StringLiteralTypo
Assert.AreEqual(Environment.ExpandEnvironmentVariables("%PATH%"), externalTool.ParseArguments("%!PATH%"))
externalTool.ConnectionInfo.Name = "()%!^""<>&|\""\\"
Assert.AreEqual("%%", externalTool.ParseArguments("%%"))
Assert.AreEqual("% %", externalTool.ParseArguments("% %"))
Assert.AreEqual("%-%", externalTool.ParseArguments("%-%"))
Assert.AreEqual("%!%", externalTool.ParseArguments("%!%"))
Assert.AreEqual("%^%", externalTool.ParseArguments("%^%"))
Assert.AreEqual("%%%", externalTool.ParseArguments("%%%"))
Assert.AreEqual("%foobar%", externalTool.ParseArguments("%foobar%"))
Assert.AreEqual("%-foobar%", externalTool.ParseArguments("%-foobar%"))
Assert.AreEqual("%!foobar%", externalTool.ParseArguments("%!foobar%"))
Assert.AreEqual("%-!^\", externalTool.ParseArguments("%-!^\"))
Assert.AreEqual("^(^)^%^!^^\^""^<^>^&^|\\\^""\\", externalTool.ParseArguments("%NAME%"))
Assert.AreEqual("^(^)^%^!^^^""^<^>^&^|\^""\\", externalTool.ParseArguments("%-NAME%"))
Assert.AreEqual("()%!^""<>&|\""\\", externalTool.ParseArguments("%!NAME%"))
Assert.AreEqual("^(^)^%^!^^\^""^<^>^&^|\\\^""\\", externalTool.ParseArguments("%name%"))
Assert.AreEqual("%^(^)^%^!^^\^""^<^>^&^|\\\^""\\", externalTool.ParseArguments("%%name%"))
Assert.AreEqual("^(^)^%^!^^\^""^<^>^&^|\\\^""\\%", externalTool.ParseArguments("%name%%"))
Assert.AreEqual("^(^)^%^!^^\^""^<^>^&^|\\\^""\\ ^(^)^%^!^^\^""^<^>^&^|\\\^""\\", externalTool.ParseArguments("%name% %name%"))
Assert.AreEqual("%-^(^)^%^!^^\^""^<^>^&^|\\\^""\\", externalTool.ParseArguments("%-%name%"))
Assert.AreEqual("^(^)^%^!^^\^""^<^>^&^|\\\^""\\-%", externalTool.ParseArguments("%name%-%"))
Assert.AreEqual("%!^(^)^%^!^^\^""^<^>^&^|\\\^""\\", externalTool.ParseArguments("%!%name%"))
Assert.AreEqual("^(^)^%^!^^\^""^<^>^&^|\\\^""\\!%", externalTool.ParseArguments("%name%!%"))
Assert.AreEqual("\^(^)^%^!^^\^""^<^>^&^|\\\^""\\", externalTool.ParseArguments("\%NAME%"))
Assert.AreEqual("\^(^)^%^!^^\^""^<^>^&^|\\\^""\\NAME%", externalTool.ParseArguments("\%NAME%NAME%"))
Assert.AreEqual("%NAME\%", externalTool.ParseArguments("%NAME\%"))
Assert.AreEqual("""^(^)^%^!^^\^""^<^>^&^|\\\^""\\\\""", externalTool.ParseArguments("""%NAME%"""))
Assert.AreEqual("""^(^)^%^!^^^""^<^>^&^|\^""\\""", externalTool.ParseArguments("""%-NAME%"""))
Assert.AreEqual("""()%!^""<>&|\""\\""", externalTool.ParseArguments("""%!NAME%"""))
Assert.AreEqual("""^(^)^%^!^^\^""^<^>^&^|\\\^""\\", externalTool.ParseArguments("""%NAME%"))
Assert.AreEqual("""^(^)^%^!^^^""^<^>^&^|\^""\\", externalTool.ParseArguments("""%-NAME%"))
Assert.AreEqual("""()%!^""<>&|\""\\", externalTool.ParseArguments("""%!NAME%"))
Assert.AreEqual("^(^)^%^!^^\^""^<^>^&^|\\\^""\\\\""", externalTool.ParseArguments("%NAME%"""))
Assert.AreEqual("^(^)^%^!^^^""^<^>^&^|\^""\\""", externalTool.ParseArguments("%-NAME%"""))
Assert.AreEqual("()%!^""<>&|\""\\""", externalTool.ParseArguments("%!NAME%"""))
Assert.AreEqual(Environment.ExpandEnvironmentVariables("%USERNAME%"), externalTool.ParseArguments("\%USERNAME\%"))
Assert.AreEqual(Environment.ExpandEnvironmentVariables("%USERNAME%"), externalTool.ParseArguments("\%-USERNAME\%"))
Assert.AreEqual(Environment.ExpandEnvironmentVariables("%USERNAME%"), externalTool.ParseArguments("\%!USERNAME\%"))
Assert.AreEqual("\^(^)^%^!^^\^""^<^>^&^|\\\^""\\", externalTool.ParseArguments("\%NAME%"))
Assert.AreEqual("%NAME\%", externalTool.ParseArguments("%NAME\%"))
Assert.AreEqual("\\%NAME\\%", externalTool.ParseArguments("\\%NAME\\%"))
Assert.AreEqual("\\\%NAME\\\%", externalTool.ParseArguments("\\\%NAME\\\%"))
Assert.AreEqual("\\\\%NAME\\\\%", externalTool.ParseArguments("\\\\%NAME\\\\%"))
Assert.AreEqual("\\\\\%NAME\\\\\%", externalTool.ParseArguments("\\\\\%NAME\\\\\%"))
Assert.AreEqual("%NAME%", externalTool.ParseArguments("^%NAME^%"))
Assert.AreEqual("%-NAME%", externalTool.ParseArguments("^%-NAME^%"))
Assert.AreEqual("\%NAME\%", externalTool.ParseArguments("\^%NAME\^%"))
Assert.AreEqual("\%-NAME\%", externalTool.ParseArguments("\^%-NAME\^%"))
Assert.AreEqual("^%NAME^%", externalTool.ParseArguments("^^%NAME^^%"))
Assert.AreEqual("^%-NAME^%", externalTool.ParseArguments("^^%-NAME^^%"))
Assert.AreEqual("^^^^%NAME^^^^%", externalTool.ParseArguments("^^^^^%NAME^^^^^%"))
Assert.AreEqual("^^^^%-NAME^^^^%", externalTool.ParseArguments("^^^^^%-NAME^^^^^%"))
Assert.AreEqual("^^^^%!NAME^^^^%", externalTool.ParseArguments("^^^^^%!NAME^^^^^%"))
Assert.AreEqual("blah%blah", externalTool.ParseArguments("blah%blah"))
Assert.AreEqual("blah^%blah", externalTool.ParseArguments("blah^%blah"))
Assert.AreEqual("blah^^%blah", externalTool.ParseArguments("blah^^%blah"))
Assert.AreEqual("blah^^^%blah", externalTool.ParseArguments("blah^^^%blah"))
Assert.AreEqual("^^^^%-NAME^^^^% ^(^)^%^!^^\^""^<^>^&^|\\\^""\\", externalTool.ParseArguments("^^^^^%-NAME^^^^^% %NAME%"))
End Sub
End Class

View File

@@ -1,37 +0,0 @@
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
' General Information about an assembly is controlled through the following
' set of attributes. Change these attribute values to modify the information
' associated with an assembly.
' Review the values of the assembly attributes
<Assembly: AssemblyTitle("TestProject")>
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("")>
<Assembly: AssemblyProduct("TestProject")>
<Assembly: AssemblyCopyright("Copyright © 2013")>
<Assembly: AssemblyTrademark("")>
<Assembly: CLSCompliant(True)>
<Assembly: ComVisible(False)>
'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("8918ad54-4841-44e9-abda-e1b787b02c7c")>
' Version information for an assembly consists of the following four values:
'
' Major Version
' Minor Version
' Build Number
' Revision
'
' You can specify all the values or you can default the Build and Revision Numbers
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")>

View File

@@ -1,2 +0,0 @@
mRemoteNG.exe
Desktop

View File

@@ -1,179 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>
</ProductVersion>
<SchemaVersion>
</SchemaVersion>
<ProjectGuid>{24E0689D-95C0-4AAB-A93F-B8D6B7F0CB97}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>TestProject</RootNamespace>
<AssemblyName>TestProject</AssemblyName>
<FileAlignment>512</FileAlignment>
<MyType>Windows</MyType>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
<ReferencePath>$(DevEnvDir)PublicAssemblies\</ReferencePath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\Debug\</OutputPath>
<DocumentationFile>TestProject.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DocumentationFile>TestProject.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<PropertyGroup>
<OptionExplicit>On</OptionExplicit>
</PropertyGroup>
<PropertyGroup>
<OptionCompare>Binary</OptionCompare>
</PropertyGroup>
<PropertyGroup>
<OptionStrict>Off</OptionStrict>
</PropertyGroup>
<PropertyGroup>
<OptionInfer>On</OptionInfer>
</PropertyGroup>
<ItemGroup>
<Reference Include="ADTree">
<HintPath>..\mRemoteV1\References\ADTree.dll</HintPath>
</Reference>
<Reference Include="AxInterop.MSTSCLib">
<HintPath>..\mRemoteV1\obj\Debug\AxInterop.MSTSCLib.dll</HintPath>
</Reference>
<Reference Include="AxInterop.WFICALib">
<HintPath>..\mRemoteV1\obj\Debug\AxInterop.WFICALib.dll</HintPath>
</Reference>
<Reference Include="DiffieHellman">
<HintPath>..\mRemoteV1\References\DiffieHellman.dll</HintPath>
</Reference>
<Reference Include="FilteredPropertyGrid">
<HintPath>..\mRemoteV1\References\FilteredPropertyGrid.dll</HintPath>
</Reference>
<Reference Include="Interop.EOLWTSCOM">
<HintPath>..\mRemoteV1\obj\Debug\Interop.EOLWTSCOM.dll</HintPath>
<EmbedInteropTypes>False</EmbedInteropTypes>
<Private>True</Private>
</Reference>
<Reference Include="Interop.MSTSCLib">
<HintPath>..\mRemoteV1\obj\Debug\Interop.MSTSCLib.dll</HintPath>
<EmbedInteropTypes>False</EmbedInteropTypes>
<Private>True</Private>
</Reference>
<Reference Include="Interop.SHDocVw">
<HintPath>..\mRemoteV1\obj\Debug\Interop.SHDocVw.dll</HintPath>
<EmbedInteropTypes>False</EmbedInteropTypes>
<Private>True</Private>
</Reference>
<Reference Include="Interop.WFICALib">
<HintPath>..\mRemoteV1\obj\Debug\Interop.WFICALib.dll</HintPath>
<EmbedInteropTypes>False</EmbedInteropTypes>
<Private>True</Private>
</Reference>
<Reference Include="IPTextBox">
<HintPath>..\mRemoteV1\References\IPTextBox.dll</HintPath>
</Reference>
<Reference Include="log4net">
<HintPath>..\mRemoteV1\References\log4net.dll</HintPath>
</Reference>
<Reference Include="MagicLibrary, Version=1.7.4.0, Culture=neutral, PublicKeyToken=3a6eb82f876a49bc">
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.VisualBasic.PowerPacks.Vs, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
<Reference Include="MiniGeckoBrowser">
<HintPath>..\mRemoteV1\References\MiniGeckoBrowser.dll</HintPath>
</Reference>
<Reference Include="MiniTabControl">
<HintPath>..\mRemoteV1\References\MiniTabControl.dll</HintPath>
</Reference>
<Reference Include="Org.Mentalis.Security">
<HintPath>..\mRemoteV1\References\Org.Mentalis.Security.dll</HintPath>
</Reference>
<Reference Include="PSTaskDialog">
<HintPath>..\mRemoteV1\References\PSTaskDialog.dll</HintPath>
</Reference>
<Reference Include="Skybound.Gecko">
<HintPath>..\mRemoteV1\References\Skybound.Gecko.dll</HintPath>
</Reference>
<Reference Include="stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<EmbedInteropTypes>False</EmbedInteropTypes>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.DirectoryServices" />
<Reference Include="System.Drawing" />
<Reference Include="System.Management" />
<Reference Include="System.Web" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq" />
<Reference Include="Tamir.SharpSSH">
<HintPath>..\mRemoteV1\References\Tamir.SharpSSH.dll</HintPath>
</Reference>
<Reference Include="VncSharpNG">
<HintPath>..\mRemoteV1\References\VncSharpNG.dll</HintPath>
</Reference>
<Reference Include="WeifenLuo.WinFormsUI.Docking">
<HintPath>..\mRemoteV1\References\WeifenLuo.WinFormsUI.Docking.dll</HintPath>
</Reference>
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Import Include="System" />
<Import Include="System.Collections" />
<Import Include="System.Collections.Generic" />
<Import Include="System.Data" />
<Import Include="System.Diagnostics" />
<Import Include="System.Linq" />
<Import Include="System.Xml.Linq" />
<Import Include="Microsoft.VisualBasic" />
<Import Include="Microsoft.VisualStudio.TestTools.UnitTesting" />
</ItemGroup>
<ItemGroup>
<CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
<Visible>False</Visible>
</CodeAnalysisDependentAssemblyPaths>
</ItemGroup>
<ItemGroup>
<Compile Include="ExternalToolTest.vb" />
<Compile Include="My Project\AssemblyInfo.vb" />
</ItemGroup>
<ItemGroup>
<Shadow Include="Test References\mRemoteNG.accessor" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\mRemoteV1\mRemoteV1.vbproj">
<Project>{4934A491-40BC-4E5B-9166-EA1169A220F6}</Project>
<Name>mRemoteV1</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -1,19 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<TestSettings name="Trace and Test Impact" id="e062ce86-3357-43c9-b5c3-6b38a0dc3776" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<Description>These are test settings for Trace and Test Impact.</Description>
<Execution>
<TestTypeSpecific />
<AgentRule name="Execution Agents">
<DataCollectors>
<DataCollector uri="datacollector://microsoft/SystemInfo/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo.SystemInfoDataCollector, Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="System Information">
</DataCollector>
<DataCollector uri="datacollector://microsoft/HttpProxy/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.HttpProxyCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="ASP.NET Client Proxy for IntelliTrace and Test Impact">
</DataCollector>
<DataCollector uri="datacollector://microsoft/TestImpact/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.TestImpactDataCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Test Impact">
</DataCollector>
<DataCollector uri="datacollector://microsoft/TraceDebugger/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.TraceDebuggerDataCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="IntelliTrace">
</DataCollector>
</DataCollectors>
</AgentRule>
</Execution>
</TestSettings>

1
UI_tests.playlist Normal file
View File

@@ -0,0 +1 @@
<Playlist Version="1.0"><Add Test="mRemoteNGTests.UI.WindowListTests.TestMethod1" /><Add Test="mRemoteNGTests.UI.WindowListTests.AddWindowToList" /><Add Test="mRemoteNGTests.UI.WindowListTests.CountReturnsCorrectNumber" /></Playlist>

View File

@@ -0,0 +1,25 @@
using System;
using NUnit.Framework;
using mRemoteNG.App;
using log4net;
namespace mRemoteNGTests.App
{
[TestFixture]
public class LoggerTests
{
[Test]
public void GetSingletonInstanceReturnsAnILogObject()
{
Assert.That(Logger.Instance, Is.InstanceOf<ILog>());
}
[Test]
public void SingletonOnlyEverReturnsTheSameInstance()
{
ILog log1 = Logger.Instance;
ILog log2 = Logger.Instance;
Assert.That(log1, Is.EqualTo(log2));
}
}
}

View File

@@ -0,0 +1,27 @@
using System;
using NUnit.Framework;
using mRemoteNG.Config;
using mRemoteNG.Config.Connections;
using NSubstitute;
namespace mRemoteNGTests.Config.Connections
{
[TestFixture]
public class SqlConnectionUpdateCheckerTests
{
SqlConnectionsUpdateChecker _updateChecker;
[SetUp]
public void Setup()
{
_updateChecker = new SqlConnectionsUpdateChecker();
}
[TearDown]
public void Teardown()
{
_updateChecker.Dispose();
_updateChecker = null;
}
}
}

View File

@@ -0,0 +1,32 @@
using System;
using NUnit.Framework;
using mRemoteNG.Config.Connections;
using System.Data.SqlClient;
namespace mRemoteNGTests.Config.Connections
{
[TestFixture]
public class SqlUpdateQueryBuilderTest
{
private SqlUpdateQueryBuilder _sqlUpdateQueryBuilder;
[SetUp]
public void Setup()
{
_sqlUpdateQueryBuilder = new SqlUpdateQueryBuilder();
}
[TearDown]
public void Teardown()
{
_sqlUpdateQueryBuilder = null;
}
[Test]
public void SqlUpdateQueryBuilderReturnsSomeCommand()
{
SqlCommand command = _sqlUpdateQueryBuilder.BuildCommand();
Assert.AreNotEqual(command.CommandText, "");
}
}
}

View File

@@ -0,0 +1,40 @@
using mRemoteNG.Config.Connections;
using NUnit.Framework;
namespace mRemoteNGTests.Config.Connections
{
[TestFixture]
public class SqlUpdateTimerTests
{
private SqlUpdateTimer sqlUpdateChecker;
[SetUp]
public void SetupSqlUpdateChecker()
{
sqlUpdateChecker = new SqlUpdateTimer();
}
[TearDown]
public void TearDownSqlUpdateChecker()
{
sqlUpdateChecker.Dispose();
sqlUpdateChecker = null;
}
[Test]
public void EnableSQLUpdating()
{
sqlUpdateChecker.Enable();
Assert.AreEqual(true, sqlUpdateChecker.IsUpdateCheckingEnabled());
}
[Test]
public void DisableSQLUpdating()
{
sqlUpdateChecker.Enable();
Assert.AreEqual(true, sqlUpdateChecker.IsUpdateCheckingEnabled());
sqlUpdateChecker.Disable();
Assert.AreEqual(false, sqlUpdateChecker.IsUpdateCheckingEnabled());
}
}
}

View File

@@ -0,0 +1,107 @@
using mRemoteNG.Connection;
using NUnit.Framework;
using System.Reflection;
using System.Collections;
namespace mRemoteNGTests.Connection
{
[TestFixture]
public class ConnectionInfoInheritanceTests
{
private ConnectionInfo _connectionInfo;
private ConnectionInfoInheritance _inheritance;
private PropertyInfo[] _inheritanceProperties = typeof(ConnectionInfoInheritance).GetProperties();
[SetUp]
public void Setup()
{
_connectionInfo = new ConnectionInfo();
_inheritance = new ConnectionInfoInheritance(_connectionInfo);
}
[TearDown]
public void Teardown()
{
_connectionInfo = null;
_inheritance = null;
}
[Test]
public void TurnOffInheritanceCompletely()
{
_inheritance.Username = true;
_inheritance.TurnOffInheritanceCompletely();
Assert.That(AllInheritancePropertiesAreFalse(), Is.True);
}
[Test]
public void TurnOnInheritanceCompletely()
{
_inheritance.TurnOnInheritanceCompletely();
Assert.That(AllInheritancePropertiesAreTrue(), Is.True);
}
[Test]
public void DisableInheritanceTurnsOffAllInheritance()
{
_inheritance.Username = true;
_inheritance.DisableInheritance();
Assert.That(AllInheritancePropertiesAreFalse(), Is.True);
}
[Test]
public void EnableInheritanceRestoresPreviousInheritanceValues()
{
_inheritance.Username = true;
_inheritance.DisableInheritance();
_inheritance.EnableInheritance();
Assert.That(_inheritance.Username, Is.True);
}
private bool AllInheritancePropertiesAreTrue()
{
bool allPropertiesTrue = true;
foreach (var property in _inheritanceProperties)
{
if (PropertyIsBoolean(property) && PropertyIsChangedWhenSettingInheritAll(property) && BooleanPropertyIsSetToFalse(property))
allPropertiesTrue = false;
}
return allPropertiesTrue;
}
private bool AllInheritancePropertiesAreFalse()
{
bool allPropertiesFalse = true;
foreach (var property in _inheritanceProperties)
{
if (PropertyIsBoolean(property) && PropertyIsChangedWhenSettingInheritAll(property) && BooleanPropertyIsSetToTrue(property))
allPropertiesFalse = false;
}
return allPropertiesFalse;
}
private bool PropertyIsChangedWhenSettingInheritAll(PropertyInfo property)
{
ArrayList propertiesIgnoredByInheritAll = new ArrayList();
propertiesIgnoredByInheritAll.Add("IsDefault");
return propertiesIgnoredByInheritAll.Contains(property);
}
private bool PropertyIsBoolean(PropertyInfo property)
{
return (property.PropertyType.Name == typeof(bool).Name);
}
private bool BooleanPropertyIsSetToFalse(PropertyInfo property)
{
return (bool)property.GetValue(_inheritance) == false;
}
private bool BooleanPropertyIsSetToTrue(PropertyInfo property)
{
return (bool)property.GetValue(_inheritance) == true;
}
}
}

View File

@@ -0,0 +1,250 @@
#region Copyright (c) 2003-2005, Luke T. Maxon
/********************************************************************************************************************
'
' Copyright (c) 2003-2005, Luke T. Maxon
' All rights reserved.
'
' Redistribution and use in source and binary forms, with or without modification, are permitted provided
' that the following conditions are met:
'
' * Redistributions of source code must retain the above copyright notice, this list of conditions and the
' following disclaimer.
'
' * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
' the following disclaimer in the documentation and/or other materials provided with the distribution.
'
' * Neither the name of the author nor the names of its contributors may be used to endorse or
' promote products derived from this software without specific prior written permission.
'
' THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
' WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
' PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
' ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
' LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
' INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
' OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
' IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'
'*******************************************************************************************************************/
#endregion
//Contributed by: Ian Cooper
using System.Collections;
using System.Windows.Forms;
namespace NUnit.Extensions.Forms
{
/// <summary>
/// A ControlTester for testing List Views.
/// </summary>
/// <remarks>
/// It includes helper methods for selecting items from the list
/// and for clearing those selections.</remarks>
public class ListViewTester : ControlTester
{
/// <summary>
/// Creates a ControlTester from the control name and the form instance.
/// </summary>
/// <remarks>
/// It is best to use the overloaded Constructor that requires just the name
/// parameter if possible.
/// </remarks>
/// <param name="name">The Control name.</param>
/// <param name="form">The Form instance.</param>
public ListViewTester(string name, Form form)
: base(name, form)
{
}
/// <summary>
/// Creates a ControlTester from the control name and the form name.
/// </summary>
/// <remarks>
/// It is best to use the overloaded Constructor that requires just the name
/// parameter if possible.
/// </remarks>
/// <param name="name">The Control name.</param>
/// <param name="formName">The Form name..</param>
public ListViewTester(string name, string formName)
: base(name, formName)
{
}
/// <summary>
/// Creates a ControlTester from the control name.
/// </summary>
/// <remarks>
/// This is the best constructor.</remarks>
/// <param name="name">The Control name.</param>
public ListViewTester(string name)
: base(name)
{
}
/// <summary>
/// Creates a ControlTester from a ControlTester and an index where the
/// original tester's name is not unique.
/// </summary>
/// <remarks>
/// It is best to use the overloaded Constructor that requires just the name
/// parameter if possible.
/// </remarks>
/// <param name="tester">The ControlTester.</param>
/// <param name="index">The index to test.</param>
public ListViewTester(ControlTester tester, int index)
: base(tester, index)
{
}
/// <summary>
/// Allows you to find a ListViewTester by index where the name is not unique.
/// </summary>
/// <remarks>
/// This was added to support the ability to find controls where their name is
/// not unique. If all of your controls are uniquely named (I recommend this) then
/// you will not need this.
/// </remarks>
/// <value>The ControlTester at the specified index.</value>
/// <param name="index">The index of the ListViewTester.</param>
public new ListViewTester this[int index]
{
get
{
return new ListViewTester(this, index);
}
}
/// <summary>
/// Provides access to all of the Properties of the ListBox.
/// </summary>
/// <remarks>
/// Allows typed access to all of the properties of the underlying control.
/// </remarks>
/// <value>The underlying control.</value>
public ListView Properties
{
get
{
return (ListView)Control;
}
}
/// <summary>
/// Helper method to return the List View's Items property
/// </summary>
public ListView.ListViewItemCollection Items
{
get
{
return Properties.Items;
}
}
/// <summary>
/// Helper method to return the columns of the list view
/// </summary>
public ListView.ColumnHeaderCollection Columns
{
get
{
return Properties.Columns;
}
}
/// <summary>
/// Clears the selections from the list box.
/// </summary>
public void ClearSelected()
{
foreach (ListViewItem item in Properties.Items)
{
item.Selected = false;
}
}
/// <summary>
/// Selects an item in the ListBox according to its index.
/// </summary>
/// <param name="i">the index to select.</param>
public void Select(int i)
{
Properties.Items[i].Selected = true;
FireEvent("ItemActivate");
}
/// <summary>
/// Selects an item in the list according to its string value.
/// </summary>
/// <param name="text">The item to select.</param>
public void Select(string text)
{
int index = FindItemByString(text);
if (ItemFound(index))
{
Select(index);
}
}
/// <summary>
/// Multiple selection of a range of items
/// </summary>
/// <param name="items"></param>
public void SelectItems(string[] items)
{
foreach (string item in items)
{
Select(item);
}
}
/// <summary>
/// Test that only the indicated items are selected
/// </summary>
/// <param name="matchList"></param>
public bool SelectedItemsMatch(string[] matches)
{
ArrayList matchList = new ArrayList(matches);
if (matchList.Count != Properties.SelectedItems.Count)
{
return false;
}
foreach (ListViewItem item in Properties.SelectedItems)
{
if (!matchList.Contains(item.Text))
{
return false;
}
}
return true;
}
#region Implementation
private bool ItemFound(int index)
{
return index != -1;
}
private int FindItemByString(string text)
{
for (int i = 0; i < Properties.Items.Count; i++)
{
if (Properties.Items[i].Text == text)
{
return i;
}
}
return -1;
}
#endregion
}
}

View File

@@ -5,12 +5,12 @@ using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("SharedLibraryNG")]
[assembly: AssemblyTitle("mRemoteNGTests")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("SharedLibraryNG")]
[assembly: AssemblyCopyright("Copyright © 2013")]
[assembly: AssemblyProduct("mRemoteNGTests")]
[assembly: AssemblyCopyright("Copyright © 2016")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -20,7 +20,7 @@ using System.Runtime.InteropServices;
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("f4470853-f933-4203-9d2a-b3c731e225c7")]
[assembly: Guid("4e9583d3-2b1b-419d-bda5-f06e70e03b50")]
// Version information for an assembly consists of the following four values:
//

View File

@@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using mRemoteNG.Controls;
using NUnit.Framework;
using NUnit.Extensions.Forms;
using System.Windows.Forms;
namespace mRemoteNGTests.UI.Controls
{
public class CustomListViewTests
{
mRemoteNG.Controls.ListView _listView;
[SetUp]
public void Setup()
{
_listView = new mRemoteNG.Controls.ListView();
_listView.Name = "myTestListView";
_listView.View = System.Windows.Forms.View.Tile;
}
[TearDown]
public void Teardown()
{
_listView.Dispose();
while (_listView.Disposing) ;
_listView = null;
}
}
}

View File

@@ -0,0 +1,48 @@
namespace mRemoteNGTests.UI.Controls
{
partial class TestForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.SuspendLayout();
//
// TestForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 262);
this.Name = "TestForm";
this.Text = "TestForm";
this.ResumeLayout(false);
}
#endregion
}
}

View File

@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace mRemoteNGTests.UI.Controls
{
public partial class TestForm : Form
{
public TestForm()
{
InitializeComponent();
}
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,35 @@
using mRemoteNG.App;
using mRemoteNG.Messages;
using mRemoteNG.UI.Window;
using NUnit.Framework;
using mRemoteNG.UI.Forms;
using WeifenLuo.WinFormsUI.Docking;
namespace mRemoteNGTests.UI.Forms
{
public class OptionsFormSetupAndTeardown
{
protected frmOptions _optionsForm;
[OneTimeSetUp]
public void OnetimeSetup()
{
Runtime.MessageCollector = new MessageCollector(new ErrorAndInfoWindow(new DockContent()));
}
[SetUp]
public void Setup()
{
_optionsForm = new frmOptions();
_optionsForm.Show();
}
[TearDown]
public void Teardown()
{
_optionsForm.Dispose();
while (_optionsForm.Disposing) ;
_optionsForm = null;
}
}
}

View File

@@ -0,0 +1,44 @@
using mRemoteNG.App;
using mRemoteNG.Controls;
using mRemoteNG.Forms;
using mRemoteNG.Messages;
using mRemoteNG.UI.Window;
using NUnit.Extensions.Forms;
using NUnit.Framework;
using System;
using System.Threading;
using WeifenLuo.WinFormsUI.Docking;
namespace mRemoteNGTests.UI.Forms
{
[TestFixture]
public class OptionsFormTests : OptionsFormSetupAndTeardown
{
[Test]
public void ClickingCloseButtonClosesTheForm()
{
bool eventFired = false;
_optionsForm.FormClosed += (o, e) => eventFired = true;
ButtonTester cancelButton = new ButtonTester("CancelButtonControl", _optionsForm);
cancelButton.Click();
Assert.That(eventFired, Is.True);
}
[Test]
public void ClickingOKButtonClosesTheForm()
{
bool eventFired = false;
_optionsForm.FormClosed += (o, e) => eventFired = true;
ButtonTester cancelButton = new ButtonTester("OkButton", _optionsForm);
cancelButton.Click();
Assert.That(eventFired, Is.True);
}
[Test]
public void ListViewContainsOptionsPages()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
Assert.That(listViewTester.Items.Count, Is.EqualTo(8));
}
}
}

View File

@@ -0,0 +1,34 @@
using System;
using NUnit.Framework;
using mRemoteNGTests.UI.Forms;
using NUnit.Extensions.Forms;
namespace mRemoteNGTests.UI.Forms.OptionsPages
{
[TestFixture]
public class OptionsAdvancedPageTests : OptionsFormSetupAndTeardown
{
[Test]
public void AdvancedPageLinkExistsInListView()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
Assert.That(listViewTester.Items[7].Text, Does.Match("Advanced"));
}
[Test]
public void AdvancedIconShownInListView()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
Assert.That(listViewTester.Items[7].ImageList, Is.Not.Null);
}
[Test]
public void SelectingAdvancedPageLoadsSettings()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
listViewTester.Select("Advanced");
CheckBoxTester checkboxTester = new CheckBoxTester("chkWriteLogFile", _optionsForm);
Assert.That(checkboxTester.Text, Does.Match("Write log file"));
}
}
}

View File

@@ -0,0 +1,34 @@
using System;
using NUnit.Framework;
using mRemoteNGTests.UI.Forms;
using NUnit.Extensions.Forms;
namespace mRemoteNGTests.UI.Forms.OptionsPages
{
[TestFixture]
public class OptionsAppearancePageTests : OptionsFormSetupAndTeardown
{
[Test]
public void AppearancePageLinkExistsInListView()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
Assert.That(listViewTester.Items[1].Text, Does.Match("Appearance"));
}
[Test]
public void IconShownInListView()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
Assert.That(listViewTester.Items[1].ImageList, Is.Not.Null);
}
[Test]
public void SelectingAppearancePageLoadsSettings()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
listViewTester.Select("Appearance");
CheckBoxTester checkboxTester = new CheckBoxTester("chkShowSystemTrayIcon", _optionsForm);
Assert.That(checkboxTester.Text, Does.Match("show notification area icon"));
}
}
}

View File

@@ -0,0 +1,34 @@
using System;
using NUnit.Framework;
using mRemoteNGTests.UI.Forms;
using NUnit.Extensions.Forms;
namespace mRemoteNGTests.UI.Forms.OptionsPages
{
[TestFixture]
public class OptionsConnectionsPageTests : OptionsFormSetupAndTeardown
{
[Test]
public void ConnectionsPageLinkExistsInListView()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
Assert.That(listViewTester.Items[3].Text, Does.Match("Connections"));
}
[Test]
public void ConnectionsIconShownInListView()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
Assert.That(listViewTester.Items[3].ImageList, Is.Not.Null);
}
[Test]
public void SelectingConnectionsPageLoadsSettings()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
listViewTester.Select("Connections");
CheckBoxTester checkboxTester = new CheckBoxTester("chkSingleClickOnConnectionOpensIt", _optionsForm);
Assert.That(checkboxTester.Text, Does.Match("Single click on connection"));
}
}
}

View File

@@ -0,0 +1,34 @@
using System;
using NUnit.Framework;
using mRemoteNGTests.UI.Forms;
using NUnit.Extensions.Forms;
namespace mRemoteNGTests.UI.Forms.OptionsPages
{
[TestFixture]
public class OptionsSQLPageTests : OptionsFormSetupAndTeardown
{
[Test]
public void SQLPageLinkExistsInListView()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
Assert.That(listViewTester.Items[4].Text, Does.Match("SQL Server"));
}
[Test]
public void SQLIconShownInListView()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
Assert.That(listViewTester.Items[4].ImageList, Is.Not.Null);
}
[Test]
public void SelectingSQLPageLoadsSettings()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
listViewTester.Select("SQL Server");
CheckBoxTester checkboxTester = new CheckBoxTester("chkUseSQLServer", _optionsForm);
Assert.That(checkboxTester.Text, Does.Match("Use SQL"));
}
}
}

View File

@@ -0,0 +1,34 @@
using System;
using NUnit.Framework;
using mRemoteNGTests.UI.Forms;
using NUnit.Extensions.Forms;
namespace mRemoteNGTests.UI.Forms.OptionsPages
{
[TestFixture]
public class OptionsStartupExitPageTests : OptionsFormSetupAndTeardown
{
[Test]
public void StartupExitPageLinkExistsInListView()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
Assert.That(listViewTester.Items[0].Text, Does.Match("Startup/Exit"));
}
[Test]
public void IconShownInListView()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
Assert.That(listViewTester.Items[0].ImageList, Is.Not.Null);
}
[Test]
public void SelectingStartupExitPageLoadsSettings()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
listViewTester.Select("Startup/Exit");
CheckBoxTester checkboxTester = new CheckBoxTester("chkSaveConsOnExit", _optionsForm);
Assert.That(checkboxTester.Text, Does.Match("Save connections"));
}
}
}

View File

@@ -0,0 +1,32 @@
using NUnit.Extensions.Forms;
using NUnit.Framework;
namespace mRemoteNGTests.UI.Forms.OptionsPages
{
[TestFixture]
public class OptionsTabsPanelPageTests : OptionsFormSetupAndTeardown
{
[Test]
public void TabsPanelPageLinkExistsInListView()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
Assert.That(listViewTester.Items[2].Text, Does.Match("Tabs & Panels"));
}
[Test]
public void TabsPanelIconShownInListView()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
Assert.That(listViewTester.Items[2].ImageList, Is.Not.Null);
}
[Test]
public void SelectingTabsPanelPageLoadsSettings()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
listViewTester.Select("Tabs & Panels");
CheckBoxTester checkboxTester = new CheckBoxTester("chkAlwaysShowPanelTabs", _optionsForm);
Assert.That(checkboxTester.Text, Does.Match("Always show panel tabs"));
}
}
}

View File

@@ -0,0 +1,34 @@
using System;
using NUnit.Framework;
using mRemoteNGTests.UI.Forms;
using NUnit.Extensions.Forms;
namespace mRemoteNGTests.UI.Forms.OptionsPages
{
[TestFixture]
public class OptionsThemePageTests : OptionsFormSetupAndTeardown
{
[Test]
public void ThemePageLinkExistsInListView()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
Assert.That(listViewTester.Items[6].Text, Does.Match("Theme"));
}
[Test]
public void ThemeIconShownInListView()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
Assert.That(listViewTester.Items[6].ImageList, Is.Not.Null);
}
[Test]
public void SelectingThemePageLoadsSettings()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
listViewTester.Select("Theme");
ButtonTester buttonTester = new ButtonTester("btnThemeNew", _optionsForm);
Assert.That(buttonTester.Text, Does.Match("New"));
}
}
}

View File

@@ -0,0 +1,32 @@
using NUnit.Framework;
using NUnit.Extensions.Forms;
namespace mRemoteNGTests.UI.Forms.OptionsPages
{
[TestFixture]
public class OptionsUpdatesPageTests : OptionsFormSetupAndTeardown
{
[Test]
public void UpdatesPageLinkExistsInListView()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
Assert.That(listViewTester.Items[5].Text, Does.Match("Updates"));
}
[Test]
public void UpdatesIconShownInListView()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
Assert.That(listViewTester.Items[5].ImageList, Is.Not.Null);
}
[Test]
public void SelectingUpdatesPageLoadsSettings()
{
ListViewTester listViewTester = new ListViewTester("PageListView", _optionsForm);
listViewTester.Select("Updates");
CheckBoxTester checkboxTester = new CheckBoxTester("chkCheckForUpdatesOnStartup", _optionsForm);
Assert.That(checkboxTester.Text, Does.Match("Check for updates"));
}
}
}

View File

@@ -0,0 +1,50 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using NUnit.Extensions.Forms;
using System.Threading.Tasks;
using mRemoteNG.Forms;
using mRemoteNG.UI.Forms;
namespace mRemoteNGTests.UI.Forms
{
[TestFixture]
public class PasswordFormTests
{
PasswordForm _passwordForm;
[SetUp]
public void Setup()
{
_passwordForm = new PasswordForm();
_passwordForm.Show();
}
[TearDown]
public void Teardown()
{
_passwordForm.Dispose();
while (_passwordForm.Disposing) ;
_passwordForm = null;
}
[Test]
public void PasswordFormText()
{
FormTester formTester = new FormTester("PasswordForm");
Assert.That(formTester.Text, Does.Match("Password"));
}
[Test]
public void ClickingCancelClosesPasswordForm()
{
bool eventFired = false;
_passwordForm.FormClosed += (o, e) => eventFired = true;
ButtonTester cancelButton = new ButtonTester("btnCancel", _passwordForm);
cancelButton.Click();
Assert.That(eventFired, Is.True);
}
}
}

View File

@@ -0,0 +1,138 @@
using System;
using NUnit.Framework;
using mRemoteNG.UI.Window;
namespace mRemoteNGTests.UI
{
[TestFixture]
public class WindowListTests
{
private WindowList _windowList;
[SetUp]
public void Setup()
{
_windowList = new WindowList();
}
[TearDown]
public void Teardown()
{
_windowList = null;
}
[Test]
public void EmptyWhenInitialized()
{
Assert.That(_windowList, Is.Empty);
}
[Test]
public void WindowIsInListAfterBeingAdded()
{
BaseWindow window = new BaseWindow();
_windowList.Add(window);
Assert.That(_windowList, Has.Member(window));
}
[Test]
public void WindowsAreInListAfterCallingAddRange()
{
BaseWindow window1 = new BaseWindow();
BaseWindow window2 = new BaseWindow();
BaseWindow window3 = new BaseWindow();
BaseWindow[] windowArray = new BaseWindow[] {window1, window2, window3};
_windowList.AddRange(windowArray);
Assert.That(_windowList, Contains.Item(window1));
Assert.That(_windowList, Contains.Item(window2));
Assert.That(_windowList, Contains.Item(window3));
}
[Test]
public void CountReturnsCorrectNumberOfElements()
{
_windowList.Add(new BaseWindow());
_windowList.Add(new BaseWindow());
_windowList.Add(new BaseWindow());
Assert.That(_windowList.Count, Is.EqualTo(3));
}
[Test]
public void IndexingByObjectReturnsTheCorrectObject()
{
BaseWindow window1 = new BaseWindow();
BaseWindow window2 = new BaseWindow();
_windowList.Add(window1);
_windowList.Add(window2);
Assert.That(_windowList[window1], Is.EqualTo(window1));
}
[Test]
public void IndexingByNumberReturnsTheCorrectObject()
{
BaseWindow window1 = new BaseWindow();
BaseWindow window2 = new BaseWindow();
_windowList.Add(window1);
_windowList.Add(window2);
Assert.That(_windowList[1], Is.EqualTo(window2));
}
[Test]
public void ThrowsExceptionWhenIndexingByObjectFails()
{
BaseWindow window1 = new BaseWindow();
Assert.That(() => _windowList[window1], Throws.TypeOf<ArgumentOutOfRangeException>());
}
[Test]
public void ItemIsNotInListAfterBeingRemoved()
{
BaseWindow window1 = new BaseWindow();
BaseWindow window2 = new BaseWindow();
_windowList.Add(window1);
_windowList.Add(window2);
_windowList.Remove(window1);
Assert.That(() => _windowList[window1], Throws.TypeOf<ArgumentOutOfRangeException>());
}
[Test]
public void ThrowsExceptionWhenIndexingPastListBounds()
{
BaseWindow window1 = new BaseWindow();
_windowList.Add(window1);
Assert.That(() => _windowList[100], Throws.TypeOf<ArgumentOutOfRangeException>());
}
[Test]
public void CountIsReducedAfterItemRemoved()
{
BaseWindow window1 = new BaseWindow();
BaseWindow window2 = new BaseWindow();
_windowList.Add(window1);
_windowList.Add(window2);
_windowList.Remove(window1);
Assert.That(_windowList.Count, Is.EqualTo(1));
}
[Test]
public void ListIsEmptyAfterLastItemRemoved()
{
BaseWindow window1 = new BaseWindow();
_windowList.Add(window1);
_windowList.Remove(window1);
Assert.That(_windowList, Is.Empty);
}
[Test]
public void GetWindowFromStringReturnsCorrectObject()
{
BaseWindow window1 = new BaseWindow();
window1.SetFormText("TheWindowWeWant");
BaseWindow window2 = new BaseWindow();
window2.SetFormText("WeDontWantThisWindow");
_windowList.Add(window1);
_windowList.Add(window2);
Assert.That(_windowList.FromString("TheWindowWeWant"), Is.EqualTo(window1));
}
}
}

View File

@@ -0,0 +1,137 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{1453B37F-8621-499E-B0B2-6091F76DC0BB}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>mRemoteNGTests</RootNamespace>
<AssemblyName>mRemoteNGTests</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
<IsCodedUITest>False</IsCodedUITest>
<TestProjectType>UnitTest</TestProjectType>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<ItemGroup>
<Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\mRemoteV1\References\log4net.dll</HintPath>
</Reference>
<Reference Include="NSubstitute, Version=1.10.0.0, Culture=neutral, PublicKeyToken=92dd2e9066daa5ca, processorArchitecture=MSIL">
<HintPath>..\packages\NSubstitute.1.10.0.0\lib\net45\NSubstitute.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="nunit.framework, Version=3.2.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
<HintPath>..\packages\NUnit.3.2.0\lib\net45\nunit.framework.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="NUnitForms">
<HintPath>nUnitForms\bin\NUnitForms.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="WeifenLuo.WinFormsUI.Docking, Version=2.5.0.15095, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\mRemoteV1\References\WeifenLuo.WinFormsUI.Docking.dll</HintPath>
</Reference>
</ItemGroup>
<Choose>
<When Condition="('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'">
<ItemGroup>
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework" />
</ItemGroup>
</Otherwise>
</Choose>
<ItemGroup>
<Compile Include="App\LoggerTests.cs" />
<Compile Include="Connection\ConnectionInfoInheritanceTests.cs" />
<Compile Include="ListViewTester.cs" />
<Compile Include="Config\Connections\SqlConnectionUpdateCheckerTests.cs" />
<Compile Include="Config\Connections\SqlUpdateQueryBuilderTest.cs" />
<Compile Include="Config\Connections\SqlUpdateTimerTests.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="UI\Controls\CustomListViewTests.cs" />
<Compile Include="UI\Controls\TestForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="UI\Controls\TestForm.Designer.cs">
<DependentUpon>TestForm.cs</DependentUpon>
</Compile>
<Compile Include="UI\Forms\OptionsFormSetupAndTeardown.cs" />
<Compile Include="UI\Forms\PasswordFormTests.cs" />
<Compile Include="UI\WindowListTests.cs" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\mRemoteV1\mRemoteV1.csproj">
<Project>{4934a491-40bc-4e5b-9166-ea1169a220f6}</Project>
<Name>mRemoteV1</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="UI\Controls\TestForm.resx">
<DependentUpon>TestForm.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<Choose>
<When Condition="'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'">
<ItemGroup>
<Reference Include="Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<Private>False</Private>
</Reference>
<Reference Include="Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<Private>False</Private>
</Reference>
<Reference Include="Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<Private>False</Private>
</Reference>
<Reference Include="Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<Private>False</Private>
</Reference>
</ItemGroup>
</When>
</Choose>
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,75 @@
<!DOCTYPE internal [
<!ENTITY nbsp " ">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<xsl:template match="coverage">
<html>
<head>
<title>Code Coverage Report</title>
<style>BODY { font-family: Trebuchet MS; font-size: 10pt; }
TD { font-family: Trebuchet MS; font-size: 10pt; }
.title { font-size: 20pt; font-weight: bold; }
.assembly { font-size: 14pt; }
.module { color: navy; font-size: 8pt; }
.method { color: maroon; font-size: 12pt; font-weight: bold; }
.subtitle { color: black; font-size: 12pt; font-weight: bold; }
.hdrcell { background-color: #DDEEFF; }
.datacell { background-color: #FFFFEE; text-align: right; }
.gooddatacell {background-color: #CCFFCC; text-align: right; }
.hldatacell { background-color: #FFCCCC; text-align: right; }
</style>
</head>
<body>
<div class="title">Code Coverage Report</div>
<p></p>
<xsl:apply-templates select="module" />
</body>
</html>
</xsl:template>
<xsl:template match="module">
<div class="assembly"><xsl:value-of select="@assembly"/></div>
<div class="module"><xsl:value-of select="@name"/></div>
<p></p>
<xsl:apply-templates select="method"/>
</xsl:template>
<xsl:template match="method">
<div class="method"><xsl:value-of select="@class"/>.<xsl:value-of select="@name"/></div>
<table border="1" cellpadding="3" cellspacing="0" bordercolor="black">
<tr>
<td class="hdrcell">Visit Count</td>
<td class="hdrcell">Line</td>
<td class="hdrcell">Column</td>
<td class="hdrcell">End Line</td>
<td class="hdrcell">End Column</td>
<td class="hdrcell">Document</td>
</tr>
<xsl:apply-templates select="seqpnt"/>
</table>
<p></p>
</xsl:template>
<xsl:template match="seqpnt">
<tr>
<td class="datacell">
<xsl:attribute name="class">
<xsl:choose>
<xsl:when test="@visitcount = 0">hldatacell</xsl:when>
<xsl:when test="@visitcount != 0">gooddatacell</xsl:when>
<xsl:otherwise>datacell</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<xsl:value-of select="@visitcount"/>
</td>
<td class="datacell"><xsl:value-of select="@line"/></td>
<td class="datacell"><xsl:value-of select="@column"/></td>
<td class="datacell"><xsl:value-of select="@endline"/></td>
<td class="datacell"><xsl:value-of select="@endcolumn"/></td>
<td class="datacell"><xsl:value-of select="@document"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,463 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!--This file represents the results of running a test suite-->
<test-results name="C:\Documents and Settings\Maxon Family\Desktop\nf\NUnitForms-v1.3.1-src\build\bin\Project1.nunit" total="180" failures="0" not-run="3" date="11/6/2004" time="4:12 PM">
<test-suite name="C:\Documents and Settings\Maxon Family\Desktop\nf\NUnitForms-v1.3.1-src\build\bin\Project1.nunit" success="True" time="6.234375" asserts="0">
<results>
<test-suite name="C:\Documents and Settings\Maxon Family\Desktop\nf\NUnitForms-v1.3.1-src\build\bin\NUnitForms.Test.dll" success="True" time="5.90625" asserts="0">
<results>
<test-suite name="NUnit" success="True" time="5.875" asserts="0">
<results>
<test-suite name="Extensions" success="True" time="5.859375" asserts="0">
<results>
<test-suite name="Forms" success="True" time="5.8125" asserts="0">
<results>
<test-suite name="Test" success="True" time="5.046875" asserts="0">
<results>
<test-suite name="FactoryTest" success="True" time="0.015625" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.FactoryTest.New" executed="True" success="True" time="0.016" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.FactoryTest.NewException" executed="True" success="True" time="0.000" asserts="0" />
</results>
</test-suite>
<test-suite name="SupportsAssertExtensionTest" success="True" time="0.03125" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.SupportsAssertExtensionTest.BaseClassIsTrue" executed="True" success="True" time="0.016" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.SupportsAssertExtensionTest.BaseClassIsFalse" executed="True" success="True" time="0.000" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.SupportsAssertExtensionTest.BaseClassAreEqual" executed="True" success="True" time="0.016" asserts="10" />
<test-case name="NUnit.Extensions.Forms.Test.SupportsAssertExtensionTest.BaseClassAreSame" executed="True" success="True" time="0.000" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.SupportsAssertExtensionTest.BaseClassAssertFail" executed="True" success="True" time="0.000" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.SupportsAssertExtensionTest.BaseClassAssertFailMessage" executed="True" success="True" time="0.000" asserts="0" />
</results>
</test-suite>
<test-suite name="SupportsAssertionExtensionTest" success="True" time="0.015625" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.SupportsAssertionExtensionTest.BaseClassAssert" executed="True" success="True" time="0.000" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.SupportsAssertionExtensionTest.BaseClassAssertEquals" executed="True" success="True" time="0.000" asserts="8" />
<test-case name="NUnit.Extensions.Forms.Test.SupportsAssertionExtensionTest.BaseClassAssertSame" executed="True" success="True" time="0.016" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.SupportsAssertionExtensionTest.BaseClassAssertFail" executed="True" success="True" time="0.000" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.SupportsAssertionExtensionTest.BaseClassAssertFailMessage" executed="True" success="True" time="0.000" asserts="0" />
</results>
</test-suite>
<test-suite name="SupportCurrentFormPropertyTest" success="True" time="0.046875" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.SupportCurrentFormPropertyTest.ButtonClick" executed="True" success="True" time="0.047" asserts="2" />
</results>
</test-suite>
<test-suite name="SupportFormSpecificationTest" success="True" time="0" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.SupportFormSpecificationTest.ButtonClick" executed="True" success="True" time="0.000" asserts="2" />
</results>
</test-suite>
<test-suite name="SupportFormTypeTest" success="True" time="0.015625" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.SupportFormTypeTest.ButtonClick" executed="True" success="True" time="0.016" asserts="2" />
</results>
</test-suite>
<test-suite name="ButtonTest" success="True" time="0.03125" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.ButtonTest.ButtonClick" executed="True" success="True" time="0.000" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.ButtonTest.ButtonText" executed="True" success="True" time="0.016" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.ButtonTest.FireEvent" executed="True" success="True" time="0.000" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.ButtonTest.FireEventWithArg" executed="True" success="True" time="0.016" asserts="2" />
</results>
</test-suite>
<test-suite name="CheckBoxTest" success="True" time="0.03125" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.CheckBoxTest.Check" executed="True" success="True" time="0.016" asserts="3" />
<test-case name="NUnit.Extensions.Forms.Test.CheckBoxTest.UnCheck" executed="True" success="True" time="0.000" asserts="3" />
<test-case name="NUnit.Extensions.Forms.Test.CheckBoxTest.UnCheck2" executed="True" success="True" time="0.016" asserts="3" />
<test-case name="NUnit.Extensions.Forms.Test.CheckBoxTest.ToggleWithValue" executed="True" success="True" time="0.000" asserts="3" />
</results>
</test-suite>
<test-suite name="ComboBoxTest" success="True" time="0.0625" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.ComboBoxTest.TextBox" executed="True" success="True" time="0.016" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.ComboBoxTest.Select" executed="True" success="True" time="0.016" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.ComboBoxTest.SelectByText" executed="True" success="True" time="0.016" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.ComboBoxTest.SelectByBadText" executed="True" success="True" time="0.000" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.ComboBoxTest.MethodInvokeOnControlTester" executed="True" success="True" time="0.016" asserts="1" />
</results>
</test-suite>
<test-suite name="ContextMenuTest" success="True" time="0.078125" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.ContextMenuTest.ContextMenuClick" executed="True" success="True" time="0.016" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.ContextMenuTest.GeneratedTest" executed="True" success="True" time="0.016" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.ContextMenuTest.NoSuchControlFinder" executed="True" success="True" time="0.000" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.ContextMenuTest.AmbiguousNameBecauseWeUseTextNotNameForMenuItems" executed="True" success="True" time="0.016" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.ContextMenuTest.AmbiguousNameBecauseInSubMenusButNotQualified" executed="True" success="True" time="0.000" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.ContextMenuTest.NotAmbiguousNameBecauseInSubMenus" executed="True" success="True" time="0.016" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.ContextMenuTest.AmbiguousNameBecauseInTwoMenus" executed="True" success="True" time="0.000" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.ContextMenuTest.NotAmbiguousNameBecauseInTwoMenusButQualified" executed="True" success="True" time="0.016" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.ContextMenuTest.DontNeedToSpecifyWhichForm" executed="True" success="True" time="0.000" asserts="0" />
</results>
</test-suite>
<test-suite name="ControlCollectionTest" success="True" time="0.015625" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.ControlCollectionTest.Count" executed="True" success="True" time="0.000" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.ControlCollectionTest.GetEnumerator" executed="True" success="True" time="0.000" asserts="7" />
<test-case name="NUnit.Extensions.Forms.Test.ControlCollectionTest.AddCollection" executed="True" success="True" time="0.000" asserts="7" />
<test-case name="NUnit.Extensions.Forms.Test.ControlCollectionTest.Indexer" executed="True" success="True" time="0.000" asserts="1" />
</results>
</test-suite>
<test-suite name="ControlTest" success="True" time="0.03125" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.ControlTest.ControlText" executed="True" success="True" time="0.000" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.ControlTest.ControlClick" executed="True" success="True" time="0.016" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.ControlTest.Property" executed="True" success="True" time="0.016" asserts="2" />
</results>
</test-suite>
<test-suite name="ControlNameTest" success="True" time="0.03125" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.ControlNameTest.AmbiguousName" executed="True" success="True" time="0.000" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.ControlNameTest.NoSuchName" executed="True" success="True" time="0.016" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.ControlNameTest.FindNestedControl" executed="True" success="True" time="0.000" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.ControlNameTest.UseAUserControlCustomTester" executed="True" success="True" time="0.000" asserts="1" />
</results>
</test-suite>
<test-suite name="DatabindingTest" success="True" time="0.1875" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.DatabindingTest.CheckBoxDataSetBinding" executed="True" success="True" time="0.125" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.DatabindingTest.TextBoxDataSetBinding" executed="True" success="True" time="0.047" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.DatabindingTest.DataSetBindingWithGenericPropertySetter" executed="True" success="True" time="0.016" asserts="2" />
</results>
</test-suite>
<test-suite name="DynamicControlsTest" success="True" time="0.0625" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.DynamicControlsTest.DynamicButtonClick" executed="True" success="True" time="0.000" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.DynamicControlsTest.DynamicControlsWithDuplicateNameIsAmbiguous" executed="True" success="True" time="0.016" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.DynamicControlsTest.DynamicControlsWithDuplicateNameCount" executed="True" success="True" time="0.016" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.DynamicControlsTest.DynamicControlsWithDuplicateNameEnumerator" executed="True" success="True" time="0.016" asserts="3" />
<test-case name="NUnit.Extensions.Forms.Test.DynamicControlsTest.DynamicControlsWithDuplicateNameWorksByIndex" executed="True" success="True" time="0.016" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.DynamicControlsTest.DynamicControlsWithDuplicateNameNotFound" executed="True" success="True" time="0.000" asserts="0" />
</results>
</test-suite>
<test-suite name="FormCollectionTest" success="True" time="0.015625" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.FormCollectionTest.Contains" executed="True" success="True" time="0.000" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.FormCollectionTest.Count" executed="True" success="True" time="0.000" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.FormCollectionTest.GetEnumerator" executed="True" success="True" time="0.000" asserts="7" />
<test-case name="NUnit.Extensions.Forms.Test.FormCollectionTest.AddCollection" executed="True" success="True" time="0.000" asserts="7" />
<test-case name="NUnit.Extensions.Forms.Test.FormCollectionTest.Indexer" executed="True" success="True" time="0.000" asserts="1" />
</results>
</test-suite>
<test-suite name="FormFinderTest" success="True" time="0.046875" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.FormFinderTest.FindOneForm" executed="True" success="True" time="0.016" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.FormFinderTest.FindOneFormOutOfTwo" executed="True" success="True" time="0.000" asserts="3" />
<test-case name="NUnit.Extensions.Forms.Test.FormFinderTest.FindAll" executed="True" success="True" time="0.016" asserts="4" />
<test-case name="NUnit.Extensions.Forms.Test.FormFinderTest.FindOneFormWhenThereAreTwo" executed="True" success="True" time="0.016" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.FormFinderTest.FindOneFormWhenThereAreNone" executed="True" success="True" time="0.000" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.FormFinderTest.FindTwoFormsWhenThereAreTwo" executed="True" success="True" time="0.000" asserts="3" />
</results>
</test-suite>
<test-suite name="FormTest" success="True" time="0.015625" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.FormTest.Close" executed="True" success="True" time="0.016" asserts="1" />
</results>
</test-suite>
<test-suite name="LabelTest" success="True" time="0.015625" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.LabelTest.LabelText" executed="True" success="True" time="0.016" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.LabelTest.LabelClick" executed="True" success="True" time="0.000" asserts="1" />
</results>
</test-suite>
<test-suite name="LinkLabelTest" success="True" time="0.015625" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.LinkLabelTest.LinkLabelClick" executed="True" success="True" time="0.016" asserts="2" />
</results>
</test-suite>
<test-suite name="ListBoxTest" success="True" time="0.0625" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.ListBoxTest.ListBoxPropertyAsserts" executed="True" success="True" time="0.016" asserts="3" />
<test-case name="NUnit.Extensions.Forms.Test.ListBoxTest.ListBoxSelection" executed="True" success="True" time="0.000" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.ListBoxTest.ListBoxMultiSelection" executed="True" success="True" time="0.016" asserts="5" />
<test-case name="NUnit.Extensions.Forms.Test.ListBoxTest.SelectDoesNotExist" executed="True" success="True" time="0.016" asserts="0" />
</results>
</test-suite>
<test-suite name="MainMenuTest" success="True" time="0.09375" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.MainMenuTest.PlainMenu" executed="True" success="True" time="0.000" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.MainMenuTest.QualifiedMenu" executed="True" success="True" time="0.016" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.MainMenuTest.SubMenuItem" executed="True" success="True" time="0.000" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.MainMenuTest.PartiallyQualifiedSubMenuItem" executed="True" success="True" time="0.000" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.MainMenuTest.FullyQualifiedMenuItem" executed="True" success="True" time="0.016" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.MainMenuTest.FormQualifiedMenuItem" executed="True" success="True" time="0.000" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.MainMenuTest.ItemWithAltKey" executed="True" success="True" time="0.016" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.MainMenuTest.ItemWithDot" executed="True" success="True" time="0.000" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.MainMenuTest.CantUseAmpsInName" executed="True" success="True" time="0.016" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.MainMenuTest.CantUseDotInName" executed="True" success="True" time="0.000" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.MainMenuTest.MenuPopup" executed="True" success="True" time="0.016" asserts="1" />
</results>
</test-suite>
<test-suite name="MenuItemCollectionTest" success="True" time="0" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.MenuItemCollectionTest.Count" executed="True" success="True" time="0.000" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.MenuItemCollectionTest.GetEnumerator" executed="True" success="True" time="0.000" asserts="7" />
<test-case name="NUnit.Extensions.Forms.Test.MenuItemCollectionTest.AddCollection" executed="True" success="True" time="0.000" asserts="7" />
<test-case name="NUnit.Extensions.Forms.Test.MenuItemCollectionTest.Indexer" executed="True" success="True" time="0.000" asserts="1" />
</results>
</test-suite>
<test-suite name="ModalDialogsTest" success="True" time="0.0625" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.ModalDialogsTest.TestMessageBoxOK" executed="True" success="True" time="0.016" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.ModalDialogsTest.TestMessageBoxCancel" executed="True" success="True" time="0.016" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.ModalDialogsTest.TestSimpleMessageBox" executed="True" success="True" time="0.000" asserts="3" />
<test-case name="NUnit.Extensions.Forms.Test.ModalDialogsTest.TestOKCancelMessageBox" executed="True" success="True" time="0.016" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.ModalDialogsTest.UnexpectedModalIsClosedAndFails" executed="True" success="True" time="0.000" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.ModalDialogsTest.UnexpectedModalIsClosedAndFailsNoTitle" executed="True" success="True" time="0.016" asserts="0" />
</results>
</test-suite>
<test-suite name="ModalFormsTest" success="True" time="0.046875" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.ModalFormsTest.TestModalForm" executed="True" success="True" time="0.031" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.ModalFormsTest.TestModalFormByString" executed="True" success="True" time="0.016" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.ModalFormsTest.ModalFormDoesntShow" executed="True" success="True" time="0.000" asserts="0" />
</results>
</test-suite>
<test-suite name="MouseControllerTest" success="True" time="3.375" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.MouseControllerTest.PositioningUnits" executed="True" success="True" time="0.109" asserts="12" />
<test-case name="NUnit.Extensions.Forms.Test.MouseControllerTest.PositioningUnitsWorld" executed="True" success="True" time="0.047" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.MouseControllerTest.PositioningInForm" executed="True" success="True" time="0.047" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.MouseControllerTest.PositioningInControl" executed="True" success="True" time="0.047" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.MouseControllerTest.MissingControl" executed="True" success="True" time="0.047" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.MouseControllerTest.PositioningEvents" executed="True" success="True" time="0.047" asserts="9" />
<test-case name="NUnit.Extensions.Forms.Test.MouseControllerTest.Hovering" executed="True" success="True" time="2.453" asserts="6" />
<test-case name="NUnit.Extensions.Forms.Test.MouseControllerTest.Disposing" executed="True" success="True" time="0.063" asserts="3" />
<test-case name="NUnit.Extensions.Forms.Test.MouseControllerTest.Buttons" executed="True" success="True" time="0.047" asserts="6" />
<test-case name="NUnit.Extensions.Forms.Test.MouseControllerTest.ButtonEvents" executed="True" success="True" time="0.047" asserts="4" />
<test-case name="NUnit.Extensions.Forms.Test.MouseControllerTest.XButtons" executed="False">
<reason>
<message><![CDATA[Unsure of the issue here. Investigate]]></message>
</reason>
</test-case>
<test-case name="NUnit.Extensions.Forms.Test.MouseControllerTest.XButtonEvents" executed="False">
<reason>
<message><![CDATA[Unsure of the issue here. Investigate]]></message>
</reason>
</test-case>
<test-case name="NUnit.Extensions.Forms.Test.MouseControllerTest.Clicking" executed="True" success="True" time="0.063" asserts="3" />
<test-case name="NUnit.Extensions.Forms.Test.MouseControllerTest.DoubleClicking" executed="True" success="True" time="0.047" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.MouseControllerTest.Dragging" executed="True" success="True" time="0.047" asserts="14" />
<test-case name="NUnit.Extensions.Forms.Test.MouseControllerTest.DragNull" executed="True" success="True" time="0.031" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.MouseControllerTest.DragOdd" executed="True" success="True" time="0.047" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.MouseControllerTest.DragEmpty" executed="True" success="True" time="0.047" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.MouseControllerTest.Modifiers" executed="False">
<reason>
<message><![CDATA[Unsure of the issue here. Investigate]]></message>
</reason>
</test-case>
<test-case name="NUnit.Extensions.Forms.Test.MouseControllerTest.ModifiersInvalid1" executed="True" success="True" time="0.047" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.MouseControllerTest.ModifiersInvalid2" executed="True" success="True" time="0.047" asserts="0" />
</results>
</test-suite>
<test-suite name="MultipleFormsTest" success="True" time="0.109375" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.MultipleFormsTest.TestMultipleForms" executed="True" success="True" time="0.047" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.MultipleFormsTest.TestMultipleFormsShouldNotFindLastButton" executed="True" success="True" time="0.031" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.MultipleFormsTest.DontNeedToSpecifyForm" executed="True" success="True" time="0.016" asserts="4" />
<test-case name="NUnit.Extensions.Forms.Test.MultipleFormsTest.AmbiguousNameWithMultipleForms" executed="True" success="True" time="0.016" asserts="0" />
</results>
</test-suite>
<test-suite name="RadioButtonTest" success="True" time="0.03125" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.RadioButtonTest.SelectOption" executed="True" success="True" time="0.031" asserts="10" />
</results>
</test-suite>
<test-suite name="SimpleAPIKeyboardTest" success="True" time="0.140625" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.SimpleAPIKeyboardTest.PressEnterClicksButton" executed="True" success="True" time="0.047" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.SimpleAPIKeyboardTest.TextBox" executed="True" success="True" time="0.047" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.SimpleAPIKeyboardTest.ElaborateInputTest" executed="True" success="True" time="0.047" asserts="0" />
</results>
</test-suite>
<test-suite name="SimpleAPIMouseTest" success="True" time="0.203125" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.SimpleAPIMouseTest.CorrectMouseClicking" executed="True" success="True" time="0.047" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.SimpleAPIMouseTest.CanClickMultipleControls" executed="True" success="True" time="0.047" asserts="4" />
<test-case name="NUnit.Extensions.Forms.Test.SimpleAPIMouseTest.IncorrectMouseClicking" executed="True" success="True" time="0.047" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Test.SimpleAPIMouseTest.IncorrectMouseClickingSimplifiedAPI" executed="True" success="True" time="0.063" asserts="1" />
</results>
</test-suite>
<test-suite name="TabControlTest" success="True" time="0.03125" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.TabControlTest.TabControl" executed="True" success="True" time="0.000" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.TabControlTest.ClickNonVisibleButton" executed="True" success="True" time="0.016" asserts="0" />
<test-case name="NUnit.Extensions.Forms.Test.TabControlTest.ClickVisibleButton" executed="True" success="True" time="0.016" asserts="2" />
</results>
</test-suite>
<test-suite name="TextBoxTest" success="True" time="0.0625" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.TextBoxTest.TextBox" executed="True" success="True" time="0.000" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.TextBoxTest.DataSetBinding" executed="True" success="True" time="0.031" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.TextBoxTest.DataSetBindingWithGenericPropertySetter" executed="True" success="True" time="0.031" asserts="2" />
</results>
</test-suite>
<test-suite name="TreeViewTest" success="True" time="0.015625" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Test.TreeViewTest.AfterSelectNode" executed="True" success="True" time="0.016" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Test.TreeViewTest.AfterSelectNodeSubNodes" executed="True" success="True" time="0.000" asserts="1" />
</results>
</test-suite>
</results>
</test-suite>
<test-suite name="Recorder" success="True" time="0.71875" asserts="0">
<results>
<test-suite name="Test" success="True" time="0.703125" asserts="0">
<results>
<test-suite name="CheckBoxRecorderTest" success="True" time="0.140625" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Recorder.Test.CheckBoxRecorderTest.CheckUnCheck" executed="True" success="True" time="0.141" asserts="2" />
</results>
</test-suite>
<test-suite name="ComboBoxRecorderTest" success="True" time="0.078125" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Recorder.Test.ComboBoxRecorderTest.ComboBoxEnter" executed="True" success="True" time="0.031" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Recorder.Test.ComboBoxRecorderTest.ComboBoxSelect" executed="True" success="True" time="0.016" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Recorder.Test.ComboBoxRecorderTest.ComboBoxEnterAndSelect" executed="True" success="True" time="0.031" asserts="2" />
</results>
</test-suite>
<test-suite name="DynamicControlsRecorderTest" success="True" time="0.03125" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Recorder.Test.DynamicControlsRecorderTest.DynamicControlRecorded" executed="True" success="True" time="0.031" asserts="2" />
</results>
</test-suite>
<test-suite name="EnterTextCollapsingProcessorTest" success="True" time="0" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Recorder.Test.EnterTextCollapsingProcessorTest.CanCollapse" executed="True" success="True" time="0.000" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Recorder.Test.EnterTextCollapsingProcessorTest.DontCollapseDifferentControls" executed="True" success="True" time="0.000" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Recorder.Test.EnterTextCollapsingProcessorTest.DontCollapseDifferentMethods" executed="True" success="True" time="0.000" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Recorder.Test.EnterTextCollapsingProcessorTest.CanCollapseMoreComplex" executed="True" success="True" time="0.000" asserts="5" />
</results>
</test-suite>
<test-suite name="LinkButtonRecorderTest" success="True" time="0.03125" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Recorder.Test.LinkButtonRecorderTest.Click" executed="True" success="True" time="0.016" asserts="2" />
</results>
</test-suite>
<test-suite name="ListBoxRecorderTest" success="True" time="0.078125" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Recorder.Test.ListBoxRecorderTest.SelectItem" executed="True" success="True" time="0.016" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Recorder.Test.ListBoxRecorderTest.MutlipleSelection" executed="True" success="True" time="0.031" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Recorder.Test.ListBoxRecorderTest.SingleSelectBox" executed="True" success="True" time="0.031" asserts="2" />
</results>
</test-suite>
<test-suite name="ListenerTest" success="True" time="0.015625" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Recorder.Test.ListenerTest.Listen" executed="True" success="True" time="0.016" asserts="4" />
</results>
</test-suite>
<test-suite name="MenuItemRecorderTest" success="True" time="0.015625" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Recorder.Test.MenuItemRecorderTest.MenuItemClick" executed="True" success="True" time="0.016" asserts="2" />
</results>
</test-suite>
<test-suite name="MultipleFormsTest" success="True" time="0.109375" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Recorder.Test.MultipleFormsTest.FormClose" executed="True" success="True" time="0.031" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Recorder.Test.MultipleFormsTest.EventCausesAnother" executed="True" success="True" time="0.016" asserts="1" />
<test-case name="NUnit.Extensions.Forms.Recorder.Test.MultipleFormsTest.MultipleForms" executed="True" success="True" time="0.031" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Recorder.Test.MultipleFormsTest.NamesShouldAdapt" executed="True" success="True" time="0.031" asserts="4" />
</results>
</test-suite>
<test-suite name="NameResolverTest" success="True" time="0.015625" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Recorder.Test.NameResolverTest.AmbiguousButton" executed="True" success="True" time="0.016" asserts="2" />
</results>
</test-suite>
<test-suite name="RadioButtonRecorderTest" success="True" time="0.03125" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Recorder.Test.RadioButtonRecorderTest.Click" executed="True" success="True" time="0.031" asserts="2" />
</results>
</test-suite>
<test-suite name="TabControlRecorderTest" success="True" time="0.03125" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Recorder.Test.TabControlRecorderTest.TabControlSelectIndex" executed="True" success="True" time="0.031" asserts="2" />
</results>
</test-suite>
<test-suite name="TestWriterTest" success="True" time="0.015625" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Recorder.Test.TestWriterTest.SimpleButton" executed="True" success="True" time="0.016" asserts="2" />
</results>
</test-suite>
<test-suite name="TextBoxRecorderTest" success="True" time="0.0625" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Recorder.Test.TextBoxRecorderTest.TextBoxEnter" executed="True" success="True" time="0.031" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Recorder.Test.TextBoxRecorderTest.ProgrammaticallyChangeTextIsNotRecorded" executed="True" success="True" time="0.016" asserts="2" />
<test-case name="NUnit.Extensions.Forms.Recorder.Test.TextBoxRecorderTest.ProgrammaticallyChangeTextIsNotRecordedTwoBoxes" executed="True" success="True" time="0.016" asserts="2" />
</results>
</test-suite>
<test-suite name="TreeViewRecorderTest" success="True" time="0.015625" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.Recorder.Test.TreeViewRecorderTest.TreeViewAfterSelect" executed="True" success="True" time="0.016" asserts="2" />
</results>
</test-suite>
</results>
</test-suite>
</results>
</test-suite>
</results>
</test-suite>
</results>
</test-suite>
</results>
</test-suite>
</results>
</test-suite>
<test-suite name="C:\Documents and Settings\Maxon Family\Desktop\nf\NUnitForms-v1.3.1-src\build\bin\NUnitForms.Example.exe" success="True" time="0.3125" asserts="0">
<results>
<test-suite name="NUnit" success="True" time="0.3125" asserts="0">
<results>
<test-suite name="Extensions" success="True" time="0.3125" asserts="0">
<results>
<test-suite name="Forms" success="True" time="0.296875" asserts="0">
<results>
<test-suite name="ExampleApplication" success="True" time="0.296875" asserts="0">
<results>
<test-suite name="Test" success="True" time="0.296875" asserts="0">
<results>
<test-suite name="AppTest" success="True" time="0.046875" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.ExampleApplication.Test.AppTest.ButtonLabelShouldDefaultToZero" executed="True" success="True" time="0.016" asserts="1" />
<test-case name="NUnit.Extensions.Forms.ExampleApplication.Test.AppTest.ButtonLabelShouldBeOneAfterClicked" executed="True" success="True" time="0.000" asserts="1" />
<test-case name="NUnit.Extensions.Forms.ExampleApplication.Test.AppTest.ButtonLabelShouldBeTwoAfterClickedTwice" executed="True" success="True" time="0.016" asserts="1" />
<test-case name="NUnit.Extensions.Forms.ExampleApplication.Test.AppTest.ShowModalButtonShouldShowModalDialog" executed="True" success="True" time="0.016" asserts="0" />
</results>
</test-suite>
<test-suite name="ControllerTest" success="True" time="0.03125" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.ExampleApplication.Test.ControllerTest.ShowModal" executed="True" success="True" time="0.016" asserts="0" />
<test-case name="NUnit.Extensions.Forms.ExampleApplication.Test.ControllerTest.Count" executed="True" success="True" time="0.000" asserts="0" />
<test-case name="NUnit.Extensions.Forms.ExampleApplication.Test.ControllerTest.Data" executed="True" success="True" time="0.000" asserts="1" />
</results>
</test-suite>
<test-suite name="FormTest" success="True" time="0.21875" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.ExampleApplication.Test.FormTest.ButtonLabelShouldBeControllerValue" executed="True" success="True" time="0.047" asserts="1" />
<test-case name="NUnit.Extensions.Forms.ExampleApplication.Test.FormTest.CountButtonShouldInvokeControllerCount" executed="True" success="True" time="0.047" asserts="0" />
<test-case name="NUnit.Extensions.Forms.ExampleApplication.Test.FormTest.ShowModalButtonShouldInvokeControllerShowModal" executed="True" success="True" time="0.063" asserts="0" />
<test-case name="NUnit.Extensions.Forms.ExampleApplication.Test.FormTest.ButtonLabelShouldUpdateAfterClick" executed="True" success="True" time="0.063" asserts="1" />
</results>
</test-suite>
<test-suite name="ModelTest" success="True" time="0" asserts="0">
<results>
<test-case name="NUnit.Extensions.Forms.ExampleApplication.Test.ModelTest.DefaultValue" executed="True" success="True" time="0.000" asserts="1" />
<test-case name="NUnit.Extensions.Forms.ExampleApplication.Test.ModelTest.BusinessLogic" executed="True" success="True" time="0.000" asserts="1" />
<test-case name="NUnit.Extensions.Forms.ExampleApplication.Test.ModelTest.MultipleBusinessLogic" executed="True" success="True" time="0.000" asserts="1" />
</results>
</test-suite>
</results>
</test-suite>
</results>
</test-suite>
</results>
</test-suite>
</results>
</test-suite>
</results>
</test-suite>
</results>
</test-suite>
</results>
</test-suite>
</test-results>

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,27 @@
/********************************************************************************************************************
'
' Copyright (c) 2003-2004, Luke T. Maxon
' All rights reserved.
'
' Redistribution and use in source and binary forms, with or without modification, are permitted provided
' that the following conditions are met:
'
' * Redistributions of source code must retain the above copyright notice, this list of conditions and the
' following disclaimer.
'
' * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
' the following disclaimer in the documentation and/or other materials provided with the distribution.
'
' * Neither the name of the author nor the names of its contributors may be used to endorse or
' promote products derived from this software without specific prior written permission.
'
' THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
' WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
' PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
' ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
' LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
' INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
' OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
' IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'
'*******************************************************************************************************************/

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="NSubstitute" version="1.10.0.0" targetFramework="net45" />
<package id="NUnit" version="3.2.0" targetFramework="net45" />
</packages>

View File

@@ -1,56 +1,100 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "mRemoteV1", "mRemoteV1\mRemoteV1.vbproj", "{4934A491-40BC-4E5B-9166-EA1169A220F6}"
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25123.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mRemoteV1", "mRemoteV1\mRemoteV1.csproj", "{4934A491-40BC-4E5B-9166-EA1169A220F6}"
EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TestProject", "TestProject\TestProject.vbproj", "{24E0689D-95C0-4AAB-A93F-B8D6B7F0CB97}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mRemoteNGTests", "mRemoteNGTests\mRemoteNGTests.csproj", "{1453B37F-8621-499E-B0B2-6091F76DC0BB}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{38EB1EFD-C8C8-49A2-BCA7-63F7A02B3153}"
ProjectSection(SolutionItems) = preProject
Local.testsettings = Local.testsettings
mRemoteV1.vsmdi = mRemoteV1.vsmdi
TraceAndTestImpact.testsettings = TraceAndTestImpact.testsettings
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Installer Projects", "Installer Projects", "{4FE795BE-646E-4F1B-BAD0-A68EA26394DD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CustomActions", "Installer Projects\CustomActions\CustomActions.csproj", "{5423D985-CB48-4344-B47F-E8C6D60C8B04}"
EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Installer", "Installer Projects\Installer\Installer.wixproj", "{F0168B9F-6815-40DF-BA53-46CEE7683B68}"
ProjectSection(ProjectDependencies) = postProject
{5423D985-CB48-4344-B47F-E8C6D60C8B04} = {5423D985-CB48-4344-B47F-E8C6D60C8B04}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharedLibraryNG", "SharedLibraryNG\SharedLibraryNG.csproj", "{0F615504-5F30-4CF2-8341-1DE7FEC95A23}"
EndProject
Global
GlobalSection(TestCaseManagementSettings) = postSolution
CategoryFile = mRemoteV1.vsmdi
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug Portable|Any CPU = Debug Portable|Any CPU
Debug Portable|x86 = Debug Portable|x86
Debug|Any CPU = Debug|Any CPU
Debug|x86 = Debug|x86
Release Portable|Any CPU = Release Portable|Any CPU
Release Portable|x86 = Release Portable|x86
Release|Any CPU = Release|Any CPU
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug Portable|Any CPU.ActiveCfg = Debug Portable|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug Portable|Any CPU.Build.0 = Debug Portable|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug Portable|x86.ActiveCfg = Debug Portable|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug Portable|x86.Build.0 = Debug Portable|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug|x86.ActiveCfg = Debug|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug|x86.Build.0 = Debug|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release Portable|Any CPU.ActiveCfg = Release Portable|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release Portable|Any CPU.Build.0 = Release Portable|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release Portable|x86.ActiveCfg = Release Portable|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release Portable|x86.Build.0 = Release Portable|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release|Any CPU.Build.0 = Release|Any CPU
{24E0689D-95C0-4AAB-A93F-B8D6B7F0CB97}.Debug Portable|Any CPU.ActiveCfg = Debug|Any CPU
{24E0689D-95C0-4AAB-A93F-B8D6B7F0CB97}.Debug Portable|Any CPU.Build.0 = Debug|Any CPU
{24E0689D-95C0-4AAB-A93F-B8D6B7F0CB97}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{24E0689D-95C0-4AAB-A93F-B8D6B7F0CB97}.Debug|Any CPU.Build.0 = Debug|Any CPU
{24E0689D-95C0-4AAB-A93F-B8D6B7F0CB97}.Release Portable|Any CPU.ActiveCfg = Release|Any CPU
{24E0689D-95C0-4AAB-A93F-B8D6B7F0CB97}.Release Portable|Any CPU.Build.0 = Release|Any CPU
{24E0689D-95C0-4AAB-A93F-B8D6B7F0CB97}.Release|Any CPU.ActiveCfg = Release|Any CPU
{24E0689D-95C0-4AAB-A93F-B8D6B7F0CB97}.Release|Any CPU.Build.0 = Release|Any CPU
{0F615504-5F30-4CF2-8341-1DE7FEC95A23}.Debug Portable|Any CPU.ActiveCfg = Debug|Any CPU
{0F615504-5F30-4CF2-8341-1DE7FEC95A23}.Debug Portable|Any CPU.Build.0 = Debug|Any CPU
{0F615504-5F30-4CF2-8341-1DE7FEC95A23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0F615504-5F30-4CF2-8341-1DE7FEC95A23}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0F615504-5F30-4CF2-8341-1DE7FEC95A23}.Release Portable|Any CPU.ActiveCfg = Release|Any CPU
{0F615504-5F30-4CF2-8341-1DE7FEC95A23}.Release Portable|Any CPU.Build.0 = Release|Any CPU
{0F615504-5F30-4CF2-8341-1DE7FEC95A23}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0F615504-5F30-4CF2-8341-1DE7FEC95A23}.Release|Any CPU.Build.0 = Release|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release|x86.ActiveCfg = Release|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release|x86.Build.0 = Release|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug Portable|Any CPU.ActiveCfg = Debug|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug Portable|Any CPU.Build.0 = Debug|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug Portable|x86.ActiveCfg = Debug|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug Portable|x86.Build.0 = Debug|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug|x86.ActiveCfg = Debug|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug|x86.Build.0 = Debug|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release Portable|Any CPU.ActiveCfg = Release|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release Portable|Any CPU.Build.0 = Release|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release Portable|x86.ActiveCfg = Release|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release Portable|x86.Build.0 = Release|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release|Any CPU.Build.0 = Release|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release|x86.ActiveCfg = Release|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release|x86.Build.0 = Release|Any CPU
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug Portable|Any CPU.ActiveCfg = Debug|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug Portable|Any CPU.Build.0 = Debug|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug Portable|x86.ActiveCfg = Debug|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug Portable|x86.Build.0 = Debug|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug|Any CPU.ActiveCfg = Debug|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug|Any CPU.Build.0 = Debug|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug|x86.ActiveCfg = Debug|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug|x86.Build.0 = Debug|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release Portable|Any CPU.ActiveCfg = Release|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release Portable|Any CPU.Build.0 = Release|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release Portable|x86.ActiveCfg = Release|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release Portable|x86.Build.0 = Release|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release|Any CPU.ActiveCfg = Release|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release|Any CPU.Build.0 = Release|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release|x86.ActiveCfg = Release|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release|x86.Build.0 = Release|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Debug Portable|Any CPU.ActiveCfg = Debug Portable|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Debug Portable|x86.ActiveCfg = Debug Portable|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Debug Portable|x86.Build.0 = Debug Portable|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Debug|Any CPU.ActiveCfg = Debug|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Debug|x86.ActiveCfg = Debug|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Debug|x86.Build.0 = Debug|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release Portable|Any CPU.ActiveCfg = Release Portable|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release Portable|x86.ActiveCfg = Release Portable|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release Portable|x86.Build.0 = Release Portable|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release|Any CPU.ActiveCfg = Release|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release|Any CPU.Build.0 = Release|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release|x86.ActiveCfg = Release|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{5423D985-CB48-4344-B47F-E8C6D60C8B04} = {4FE795BE-646E-4F1B-BAD0-A68EA26394DD}
{F0168B9F-6815-40DF-BA53-46CEE7683B68} = {4FE795BE-646E-4F1B-BAD0-A68EA26394DD}
EndGlobalSection
EndGlobal

View File

@@ -1,7 +0,0 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeStyle/Naming/VBNaming/Abbreviations/=ICA/@EntryIndexedValue">ICA</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/VBNaming/Abbreviations/=ID/@EntryIndexedValue">ID</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/VBNaming/Abbreviations/=IP/@EntryIndexedValue">IP</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/VBNaming/Abbreviations/=RDP/@EntryIndexedValue">RDP</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/VBNaming/Abbreviations/=VNC/@EntryIndexedValue">VNC</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/VBNaming/Abbreviations/=XML/@EntryIndexedValue">XML</s:String></wpf:ResourceDictionary>

View File

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<TestLists xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<TestList name="Lists of Tests" id="8c43106b-9dc1-4907-a29f-aa66a61bf5b6">
<RunConfiguration id="2a25bb82-f5ff-4a67-b5e9-c6aaa54d1e80" name="Local" storage="local.testsettings" type="Microsoft.VisualStudio.TestTools.Common.TestRunConfiguration, Microsoft.VisualStudio.QualityTools.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestList>
</TestLists>

Some files were not shown because too many files have changed in this diff Show More