The development platform for Windows Phone 7 targets Silverlight / C#. This is managed code, which runs on the .NET Framework. Many system API's are not exposed by the .NET Framework. To write tools, that are powered with Root Access (WP7 Root Tools or Fully Unlocked custom ROM's), you need to access the system through its native API's. In the "Guides" section of this site I wrote a guide for writing Native Code for Windows Phone 7. But due to the use of multiple development environments and writing C++ code and COM Interop layers, even the simplest Tweak app is very complex to develop. Writing native code and COM wrappers for Windows Phone 7 is also not supported in the official SDK's and also not documented at all (except on this site). Writing this code can easily result in unstable apps.
To make the development of homebrew apps for Windows Phone 7, which take advantage of the possibilities of Root Access, a lot easier and attempting to boost the homebrew community of Windows Phone 7, I decided to create an SDK. This SDK provides a lot of features that are commonly used, without having to use Native code or multiple development environments.
The WP7 Root Tools SDK has been used in a lot of apps already. You can find a list of these apps in the "Features Apps"-section of the site.
If you like this software, you can donate to buy me a beer (or two).
- All common File System operations, like copying files, creating folders, etc.
- Functions for easy processing of text-files.
- A FileStream class for easyy processing of large files.
- All common Registry operations, including reading and writing of binary-values and multi-string-values.
- XML Provisioning for easy system configuration.
- ShellExecute for opening files and launching processes.
- Retrieve a list of all installed apps on the device.
- Most functions are available as normal API and as Asynchronous API.
The download package contains a file with many code-snippets as examples for these features. The package can be downloaded from the Download-section of this site.
How to use the SDK
There are 3 files in the archive that you need to add to your Windows Phone 7 project. The x's are the fileversions of the SDK. The file-version-references in the filenames are necessary, because native libraries will have DLL-hell-issues if different versions of those native libraries are installed and used at the same time.
Add a refence in your project to WP7RootToolsSDK-x.x.x.x.dll. Include WP7RootToolsSDKNative-x.x.x.x.dll and WPInteropManifest.xml in your project. In properties of both these files set "Build Action" to "Content" and "Copy to Ouput" to "Copy Always".
Important note: If you ever download a newer version of this SDK and you update your app to use that new version of the SDK, then don't forget to drop the old SDK-files and include then new SDK-files in your project, because the old files will not be overwritten due to their unique filenames!
How to run your app
If you deploy your app the first time, your app might not have Root Access. If that is the case, then start WP7 Root Tools 0.9 (or later) and flag your app as "Trusted". If you start your app again, your app will run with high privileges! Remember that when you do a "Rebuild Solution", that will trigger a reinstall of your app. You will need to reapply Root Access for your app, using WP7 Root Tools, after you did that.
WP7 Root Tools and WP7 Root Tools SDK are Copyright by Heathcliff74 / www.wp7roottools.com in 2012
This license governs use of the "WP7 Root Tools SDK" software. If you use the software, you accept this license. If you do not accept the license, do not use the software.
- You are free to redistribute the software, as long as the copyright, conditions and disclaimer of this license are present whenever you distribute any portion of the software. This implies that if any portion of the copyrighted software is redistributed in a package without separate readable license description, a visible reference should be made in the software that states: "WP7 Root Tools SDK is copyrighted and licensed under terms of www.wp7roottools.com"
- The software is licensed "as-is." You bear the risk of using it. The developer gives no express warranties, guarantees or conditions. To the extent permitted under your local laws, the developer excludes the implied warranties of merchantability, fitness for a particular purpose and non-infringement.
- Redistributions of the copyrighted software may not be sold, nor may they be used in a commercial product or activity without first obtaining explicit permission of the developer.
- This software is still under development. Future versions may be subject to change and future version may not be downward compatible with earlier versions.
Jeremy Sinclair has created an Async CTP wrapper for the WP7 Root Tools SDK. It lets you combine the ease of use of Async CTP and the power of WP7 Root Tools SDK. I added it to the Downloads-section.
Changelog WP7 Root Tools SDK
- FIX: In previous version "RegistryHyve" was changed to "RegistryHive". The examples in the file "WP7RootToolsSDK-Examples.txt" now reflect those changes.
- FIX: Some special characters in the registry key name caused a failure while reading the registry-key.
- FIX: Serveral bug-fixes in the FileStream class
- FIX: Renamed "RegistryHyve" to "RegistryHive". This was a typo. This is a breaking change! Rename this in your existing code!
- NEW: void Environment.WindowsRestart()
- NEW: void Environment.WindowsShutdown()
- NEW: void Environment.WindowsSleep()
- FIX: It was not possible to get the contents of the root-folder.
- FIX: Massive performance-improvement for getting folder-contents (Special thanks to Ultrashot)
- NEW: string Environment.ProcessConfigXml(string ConfigXml)
- NEW: FileStream.Seek()
- NEW: string Registry.GetMultiStringValue(RegistryHyve Root, string Key, string ValueName)
- NEW: void Registry.SetMultiStringValue(RegistryHyve Root, string Key, string ValueName, string Value)
- NEW: byte Registry.GetBinaryValue(RegistryHyve Root, string Key, string ValueName)
- NEW: void Registry.SetBinaryValue(RegistryHyve Root, string Key, string ValueName, byte Value)
- NEW: void Environment.ShellExecute(string Application)
- NEW: void Environment.ShellExecute(string Application, string Arguments)
- Initial public release.