By David, on May 28th, 2009
This details how you can debug an application running on a remote machine from Visual Studio on your local machine, as if the remote application was running on your local machine.
The keys are:
- There must be a user account with the same username and password on the remote machine and the local machine (MACHINE account, not domain account).
- Visual Studio 2008 Remote Debugger must be installed and running on the remote machine under the user account in point 1
Create local machine account
- Right click My Computer > Manage
- Expand Computer Management > System Tools > Local Users and Groups
- Right-click Users under Local Users and Groups and choose New User…
- Enter in the username e.g. DebugUser
- Enter and confirm the password
- Un-check “User must change password at next login” and tick “Password never expire”
- Click Create
- Click Close
Create remote machine account
- Log on to the remote machine and repeat the steps for “Create local machine account”
- You must use the same username and password
- Find the user in the Users list and double-click to edit them
- Go to the Member Of tab
- Click Add…
- Type in Administrators and hit Enter or click OK
- Click OK
Run Visual Studio 2008 Remote Debugger
You have several options for launching the Remote Debugger.
- If you install Visual Studio 2008, the Remote Debugger folder can be found in %ProgramFiles%\Microsoft Visual Studio 9.0\Common7\IDE. In the Remote Debugger folder are separate folders for the x86 and x64 versions. Perhaps the easiest solution is to share this folder over the network, allowing you to launch the debugger over the network without having to install anything on the remote machine.
- Alternatively, you can find the Remote Debugger setup on the first disc for the Visual Studio 2008 setup, in a sub folder called Remote Debugger.
- Or, you can download it from here
It’s a good idea to run this as a Windows application as recommended by the Visual Studio 2008 Remote Debugger Configuration Wizard (and in my opinion easier to troubleshoot).
At this point if you’re not logged in as the new user you created, you might want to do that now so that you can run the Remote Debugger under them.
Once you’ve followed instructions for installing, run the remote debugger if it isn’t already by going to Start > Programs > Microsoft Visual Studio 2008 > Visual Studio Tools > Visual Studio 2008 Remote Debugger.
It should say that it’s running an instance similar to DebugUser@RemoteMachineName
Connect to the remote machine with Visual Studio
- In Visual Studio on your local machine, go to Debug > Attach to process…
- Make sure the Transport drop-down at the top is set to Default
- In Qualifier, type in the name of the Remote Debugger instance e.g. DebugUser@RemoteMachineName and hit Enter
- You should then see the list of remote processes in the list and can select the one you want and click Attach.
By David, on May 27th, 2009
The IPFilter Updater application now has its own page: http://www.davidmoore.info/ipfilter-updater/
uTorrent is one of the most popular BitTorrent clients out there. In my opinion it’s the best.
You can set up IP filtering in uTorrent to block bad seeds and peers from a list maintained by the community.
How to set up IP filtering in uTorrent
- Open up uTorrent and go to Options > Preferences from the menu or click the Preferences button in the toolbar
- Select the Advanced option in the tree
- Find ipfilter.enabled in the list and make sure it’s set to true
- Click OK
How to get and update the ipfilter.dat
I’ve written a simple program that will download the ipfilter.dat from SourceForge and copy it into the file where uTorrent expects it.

uTorrent IPFilter Updater [ Requires .NET 3.5 ]
UPDATED 26 Jan 2010: Now requires .NET 3.5, and allows mirror selection
- Extract the files to a folder, and run IPFilter.UI.exe
- Wait for it to download the mirrors, select the one you want, and click Go
- Once the file has downloaded and extracted, you can close the window
Enhancements
Done:
- Download and extract zip file to speed up the download time and minimize the download usage
- Allow selection of mirror you want to use
To Do:
- Automation through command-line arguments, for scheduled tasks
Source Code: http://github.com/DavidMoore/IP-Filter-Updater/
How to get uTorrent to pick up the new ipfilter.dat
You have two options:
- You can simply exit and restart uTorrent to load theIPFilter or
- You can leave uTorrent open and reload the IPFilter by selecting the Peers tab, right clicking in the list and choosing Reload IPFilter. Annoyingly you need a selected torrent for this to work.
Looking in the Log should show a message similar to “Loaded ipfilter.dat xxxxxx entries)”
Because IP ranges and addresses change often, it’s a good idea to update your filter list often too.
By David, on May 26th, 2009
In some of the work I’m doing right now, I’m manipulating an assembly after compile time – having it disassembled into IL, tweaked, then re-compiled back into an assembly.
The assembly is signed and what is being done to the assembly is breaking the strong name. This is quite comforting to know; the strong name wouldn’t be so strong if it was that easy to hack an assembly with a strong name.
When trying to load the hacked assembly, I am getting an exception (FileLoadException in this case but I’m guessing this may differ depending on your assembly load method) with the message “Could not load file or assembly ‘MyAssemblyName’ or one of its dependencies. Strong name validation failed.”.
The first interesting thing here is that the assembly named in the error message isn’t the hacked assembly; the hacked assembly is one of MyAssemblyName’s dependencies and is what’s triggering the error.
Make sure that you check the dependencies of the assembly named in the exception message when troubleshooting. The problem may be with one of the dependencies.
In my case the exception isn’t a surprise because of what’s being done to the assembly. But until I resolve that, how can I get around this for now?
You can exclude an assembly from strong name validation for development purposes using the Microsoft (R) .NET Framework Strong Name Utility tool aka sn.exe:
"%ProgramFiles%\Microsoft SDKs\Windows\v6.0A\bin\sn.exe" -Vr "C:\Path\To\Assembly.dll"
Make sure you change the sn.exe path depending on which version of the .NET Framework SDK you have installed. If you’re having trouble, get into the ”%ProgramFiles%\Microsoft SDKs\Windows” dir and search for sn.exe, and use the newest one you can find.
You might find it handy to add this as a Post-build event command-line for your project from within Visual Studio in Project Properties > Build Events:
"%ProgramFiles%\Microsoft SDKs\Windows\v6.0A\bin\sn.exe" -Vr "$(TargetPath)"
So how do you switch the strong name validation back on for your assembly?
Use the -Vu switch:
"%ProgramFiles%\Microsoft SDKs\Windows\v6.0A\bin\sn.exe" -Vu "C:\Path\To\Assembly.dll"
By David, on May 26th, 2009
Opera has built-in torrent support which is very handy and nice, but not quite as nice as a full-fledged client like uTorrent
To disable the Torrent support in Opera so that uTorrent or your default torrent client will be used instead:
- In Opera, type in opera:config in the address bar and hit enter
- Click the Bit Torrent section to expand it
- Untick Enable
- Hit Save
- Click OK at the message box
You won’t have to restart Opera for this change to take effect
By David, on May 26th, 2009
One of the things I learned long ago was to always have more than 1 drive or have my single drive partitioned.
You keep your programs and operating system on the C drive.
On your D drive goes all your data, downloads and anything that you don’t want to vanish on you suddenly.
A couple of advantages of this are:
- This keeps the C drive quite lean if you want to make an image of it. It contains the operating system files and installed software and nothing else.
- The D drive contains everything in one spot that you can easily set up for a backup procedure
- If something catastrophic happens to your operating system, you can (mostly) be comfortable with formatting and installing over the C drive without blowing away all your precious music, photos and docs.
- You can store your favourite software installers and drivers on your D drive which you can reach easily if doing a reinstall – rather than having to download them all again if starting from scratch.
If you don’t partition or have more than one hdd, an operating system failure could mean the hassle of removing your hard drive and backing data up off it on another running machine.
Things can be difficult though with the way Windows likes to store the user profile data on the C drive by default like your application data and My Documents.
Here are some instructions for changing Windows 7 so that all your user data is stored on your D drive (or wherever you like).
This is starting from a clean install of Windows 7 but you could do it from an existing install; just that trying to change the location of an existing user profile is extremely difficult and not recommended (hence the Dummy account):
- When prompted to enter a user name in the Windows 7 installer, use a throw-away username rather than your desired username e.g. Dummy
- Once installed you should be logged in as Dummy
- Open up C:\Users and copy the Public and Default folders to the new location e.g. D:\Users
- Open up regedit and go to the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList key
- Change the Default, ProfilesDirectory and Public values to the new location (e.g. replace %SystemDrive% with D:)
- You should also consider moving the ProgramData location too
- Restart then log on again as Dummy (not sure if this is necessary but just being safe!)
- Create a new user. This will be your preferred account. Name it what you want and add it to the Administrators group.
- Log off Dummy and log on as the new user
- Click the Start Menu and click on your folder name just below the profile grapic and above “Documents”. Right click on the folders and go Properties to verify they are stored in D:\Users
Now, if your Windows 7 install becomes unrecoverable, you can safely format and install on the C drive and your user profile will remain intact on D.
By David, on May 22nd, 2009
Here’s the article I followed to create my bootable USB flash drive when installing Windows 7 – something that’s essential when you don’t have a floppy drive or an optical drive in your machine.
http://kmwoley.com/blog/?p=345
To make the process even simpler, you can use WinRAR or an ISO-mounting or reading application to get the installation files and boot sector from the Windows 7 RC1 ISO image without needing to burn a DVD.
By David, on May 22nd, 2009
If you have several applications that are using NLog, it can be a good idea to install NLog into the GAC and reference that.
A gotcha you must watch out for is caused by this piece of configuration from the NLog site:
<configuration>
<configSections>
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
</configSections>
<nlog>
</nlog>
</configuration>
Because you are not using the strong name for the Assembly-qualified name of ConfigSectionHandler, it’s impossible to do a GAC lookup, therefore NLog won’t be found and you’ll get an application error (even if NLog is actually in the GAC).
This means your application will throw an exception when the configuration is loaded; there will be no NLog.dll in your application folder and it can’t check the GAC as it doesn’t have the strong name of the assembly you want.
You can fix this by including the strong name:
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog, Version=1.0.0.505, Culture=neutral, PublicKeyToken=5120e14c03d0593c" />
By David, on May 21st, 2009
I’ve been getting this error a bit lately as I trying to add new projects to the solution, and then add them to source control:
The project <ProjectName> cannot be added to source control. In folder <SolutionDir>, it overlaps a project that is already bound to source control at a lower root. To avoid this problem, add the project from a location below the binding root of the other source controlled projects in the solution.
The cause of this was that I had linked files within the new project that were pointing to existing files higher up in the solution folder (in this instance, in the solution root).
In this case I was linking to the strong name key from the solution root:
<SolutionRoot>\MyKey.snk
<SolutionRoot>\MyProject\MyProject.csproj <= Was linking to the key in the root
To add the project to source control, you have to remove these links first, add the project to source control, then you can put your links back in.
By David, on February 28th, 2009
Firefox still tends to be a bit of a memory hog over an extended period of time, even though the latest major version (3) has made massive memory usage improvements over previous versions.
This tweak will make sure Firefox behaves more like standard Windows applications when it comes to being minimized, as in freeing up the memory it’s using for Windows. The down-side to this is that when restored or maximized again, there will be a delay as the application shifts chunks from slow virtual memory to system memory.
- Go to about:config
- Right click anywhere in the list and choose New > Boolean
- Call the entry config.trim_on_minimize and set it to true
- Restart Firefox
- You might want to go to about:config to confirm the change took effect
By David, on February 28th, 2009
A few months ago I posted a little query about finding duplicate rows in a database table. I’m revisiting this because I helped out Doogie with a similar query last night but with some complications.
Let’s start with the original simple scenario of checking duplicates in a single column.
Some example data, a Users table:
+----+----------------+
| Id | Email |
+----+----------------+
| 1 | joe@bloggs.com |
| 2 | joe@bloggs.com |
| 3 | joe@bloggs.com |
| 4 | jane@doe.com |
| 5 | jane@doe.com |
| 6 | john@doe.com |
+----+----------------+
You can see that joe@bloggs.com and jane@doe.com have been duplicated. This could have been prevented by putting a unique index on the Email column.
So to find what emails have duplicates in our table:
Continue reading Finding duplicated data across one or more columns in a database table
|
|
|