Remedy Magic Service Desk & Internet Explorer 8: The Workaround / Fix

Update 20090907: Thanks to a smart workaround (in a comment below) by Andy Whelan, the fix is now without any user interaction. Change the erroneous line 978 ‘ListTable.dataPageSize = PageSize’ in file Program Files\Remedy\Magic Service Desk\Application Server\Scripts\commondetailstab.js to ‘try{ListTable.dataPageSize = PageSize}catch(err){}’ and start using IE8 =)

So you installed Internet Explorer 8. You read stories on the Internet about people cursing because things don’t work with IE8. Well, you think, they could’ve known. IE8 is W3C compliant, IE6 an IE7 are not. So all people using IE-only websites and applications now have a problem. But you are happy. The installation went fine (due to a fresh install, but whatever) and all your sites seem to work fine. It shouldn’t be a problem anyway, because if some site might not work, you have Minefield/Chromium/Opera. But then… you open Magic Service Desk, login, open an incident to add some details and…. hmmm


Argh. There you are. Error on page. No incident details. IE can tell you there is an error on line 978 in the file http://<MSD web server>/magic/Scripts/CommonDetailsTab.js. I looked into this file and it seems the DataPageSize property is IE only.

A quick Google search shows this is a known problem and Remedy recommends uinstalling IE8 (offline). Wait, not so fast!

First thing to do is to revert to ‘IE7 compatibility mode’. Open the Tools menu and select the compatibility option.


Oh wait… intranet addresses are selected by default (second checkbox from bottom)….


I guess Microsoft knows that the majority of applications are available only on the intranet and that IE6 is still the default browser in most companies. But wait, that means that the IE-7 compatibility mode doesn’t work as I expected. Thinking about it, it would be rather weird if IE8 had the completely different IE7 rendering engine under the hood.

Hmmm, so now what? Revert to IE7? No way, I want a W3C compliant browser! I found a way, but I must warn you, it’s ugly.

First, deselect the ‘Disable script debugging (Internet Explorer) option in Tools->Options->Advanced Tab


Now, open the incident in Magic Service Desk. You will be prompted to start the Javascript debugger.


Select Yes. You will jump into the debugger and go straight to the erroneous line in the javascript file.


Now we are going to ‘jump’ over the error. That means that this specific line will not be executed (interpreted). Press F11 then press Shift-F5 and then press Alt-Tab. Tada! You’re back at your incident and you see your incident details =)

Inserting  incident details follows the same path. Every time line 978 is called in the Javascript file, you’ll  have to jump over it to continue. As I said, ugly, but… it works!

Well, that’s it. Good luck to all of you and let’s hope Remedy will fix this soon. It’s kinda scandalous that this browser is available for over 6 months for developers for testing purposes and that NOBODY at Remedy seems to have taken the 30 minutes to download and test IE8 beta 1, beta 2 or RC1 on their product. Shameful…

I’ll post more if I find more apps/websites that don’t work on IE8. Stay tuned =)

Tested on Remedy Magic Service Desk 8.00.1803 and Internet Explorer 8.0.6001.18702 (Dutch version)


Windows Update keeps asking for a restart: Continued

Ok, to sum things up: I didn’t fix it. I just didn’t have the time to monitor registry and/or the file system to exactly track what happened. I will list what I HAVE done.

First I’d like to thank Greg Bray for being the first to leave a comment on my blog =) His suggestion is valid if you don’t want to be nagged all the time, but it isn’t useful if you want to install IE8.

My problem seems to be the fact that I installed the MSDN version of IE8, namely Beta 2, while the RC1 was already available to the public. When I tried to install that, the installer needed to uninstall Beta 2 first. No problems so far. After the reboot, however, the installer didn’t continue and manually restarting it didn’t help, because of the persistence of the Windows Update client telling me to reboot. The IE8 setup told me (I have to recall this from memory because I did take a screen shot, d0h) ‘Setup cannot continue because another update is waiting for a reboot’.

I feel real stupid, because I didn’t save the setup logs before imaging my PC, so now I have to retrace my steps. Ok, here goes.

– C:\Windows\IE8.log: RegOpenKeyEx failed with error 0x2. No solutions found. This seems to be a generic error though, it is also in my IE8.log now, and the installation went OK.

– Uninstall IE7. This fixed nothing. Both the IE7 and IE8 installation now report the same error. Only thing proven by this, is that it’s no a IE7/IE8 setup error.

– I checked the REG_MULTI_SZ key PendingFileRenameOperations in HKLM\System\CurrentControlSet\Control\Session Manager. It was empty.

– Reset the permissions on the HKCR and HKLM keys in the registry. No change.

– Started my computer in a clean state. I opened msconfig and selected diagnostic start up thereby disabling any non-critical service and program including anti-virus. I ran the setup. No change.

– Rebooted in Safe Mode and tried to install. Same error.

– I created the DWORD registry key InstalledByUser in HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer. I got this from (bullet 6). Same error.

– ‘How to solve Internet Explorer 8 installation problems‘: I followed Microsoft’s instructions and ran the command ‘secedit /configure /cfg %windir%\repair\secsetup.inf /db secsetup.sdb /verbose’. It reported that permissions on some keys could not be reset. The error was still there, but I ran out of time to troubleshoot.

So, I rebooted, fired up RIS. Waited, installed SP3, rebooted, installed IE7, rebooted, installed IE8, rebooted, installed Office 2003 SP3, rebooted, installed all other updates from the Windows Updates site (except Windows Search 4.0, yuck). And all was fine. Until… see my next blog post =P

Windows Update keeps asking for a restart

I finally made the leap of faith towards IE8. I just thought it was fait to start testing that too. And of course to broaden my perspective. I installed IE8 beta2 yesterday morning, but in the afternoon I was already sorry when I saw IE8 consuming over 400MB of physical RAM for just 5 open tabs :(. Ah well. I ran Windows Update though and it told me, RC1 was out. So I installed that in hope of getting something a little less RAM-consuming. The installation first had to uninstall the beta2 and reboot. Since that, I get nagged by Windows Update saying that I have to reboot ‘after installing updates’. Rebooting, of course, doesn’t help. Grrr. I tried to run the Windows Update again, but the same message popped up. Argh. I browsed through the registry and deleted the key HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate\AutoUpdate\RebootRequired and I could run Windows Update again. It told me there are no more update. Okay, so far so good. Then the yellow Windows Update shield popped op again telling me to reboot after installing updates. I checked the above registry key, and it was magically back… To be continued.

Bleeding Edge Web browsers – Fast but buggy

I like software, … alot =) I used to make software and loved it, but I like using and configuring it even more. The web browser seems to become the standard way to present your GUI and it’s even possible to make programs that run entirely in the web browser. I dare to say the web browser is THE most important piece of end-user software today.

Since Google released it’s branded version of Chromium, the Javascript engine (or interpreter) is under major discussion. Google had the brilliant idea (I don’t know if they were the first, though) to compile Javascript code and run it as machine code instead of interpreting it the old-school way. The implementation of this idea, namely V8, has significantly sped up our browsing experience. This is not the only reason why Chromium (or Chrome, as you like) is so fast. It’s of course also fast, because it’s ‘just’a clean browser. Not alot of options, no plugins, just browsing. I’ve been using the daily build version of Chromium since build 4xxx and I must say, it’s been getting better and better. The speed has improved, but, more importantly, so has the compatibility. More and more sites are rendered correctly and allow you to use their functionality with the Chromium web browser. It’s probably safe to say that also web builders adjust their website in such a way, that Chromium (and therefor also Apple/Windows using that are using Safari) can render their sites correctly.

Mozilla’s answer to Google’s V8 Javascript engine is called TraceMonkey. It’s will be available to the public when Firefox 3.5 goes final, but of course there are also daily builds =) Ive also been using these daily builds and I must say, it’s blazing fast. Because I’m using some plugins, the overall browsing experience is somewhat slower then Chromium, but, then again, more site render correctly with Minefield, this is the internal name for the Firefox 3.5 alfa/beta daily builds.

I’m not gonna sum up a list of comparisons between the two, there are plenty of websites that already do this. I would encourage you, though, to go for a test ride yourself 🙂 If you want to run some synthetic benches, check out Dromaeo and Sunspider, but I recommend you just use the sites you visit on a daily basis to get a good idea what your choices are. The web browsers is the program you use most, and it’s not hard to see it’s only gonna be more used in the future.

Minefield (Firfox) daily builds with TraceMonkey. To enable TraceMonkey: Install the browser and start it up. Type about:config in the address bar. Scroll down to the variable,  double click it,  it should switch to ‘enabled’. You are now TraceMonkey enabled 🙂 One nice touch, is that the daily build updates itself to newer daily builds standard. You’ll receive a message when a new version is available, which is, surprise, surprise, almost daily 🙂

Chromium daily builds with V8. V8 is always enabled, just download, install/unpack and run. Chromium is, btw, the open source code that Google build his Chrome browser on. Google adds some Google branding and software that gives them more info on where you are browsing. I’ve never been such a Big Brother fan, so I was glad when I found out that Chromium doesn’t have all that stuff. Note: It’s not quite free of ‘tracing’ code, though. Google Search the Web to find info on how to minimize the information that Google collects about all of us even more. Here is the change log for the daily builds.

Alternatively, there is of course Opera. This browser is build by some brilliant assembly programmers. Their Opera 10 release is the first browser to pass the 3rd Acid test. This browser is not very stable though and it’s compatibility with websites is worse then the two I mention above, so I found I could not use this browser for daily use.

And for the Microsoft fans, there is Internet Explorer 8. A real improvement over IE6 & IE7, but that is mainly because they realise it might be a good idea to follow the World Wide Web Standards instead of doing their own thing. When they were at it, they also improved Javascript performance.

Chromium (Chrome) Command Line Switches

There are lots of websites that publish(ed) a list of Chromium command line switches. I couldn’t find and explanation for most switches though. Therefor I post the sourcecode with comments as of 20090310, enjoy 🙂

// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include “base/base_switches.h”

namespace switches {

// If the program includes chrome/common/debug_on_start.h, the process will
// start the JIT system-registered debugger on itself and will wait for 60
// seconds for the debugger to attach to itself. Then a break point will be hit.
const wchar_t kDebugOnStart[] = L”debug-on-start”;

// Will wait for 60 seconds for a debugger to come to attach to the process.
const wchar_t kWaitForDebugger[] = L”wait-for-debugger”;

// Suppresses all error dialogs when present.
const wchar_t kNoErrorDialogs[] = L”noerrdialogs”;

// Disables the crash reporting.
const wchar_t kDisableBreakpad[] = L”disable-breakpad”;

// Generates full memory crash dump.
const wchar_t kFullMemoryCrashReport[] = L”full-memory-crash-report”;

// The value of this switch determines whether the process is started as a
// renderer or plugin host. If it’s empty, it’s the browser.
const wchar_t kProcessType[] = L”type”;

// Enable DCHECKs in release mode.
const wchar_t kEnableDCHECK[] = L”enable-dcheck”;

// Refuse to make HTTP connections and refuse to accept certificate errors.
// For more information about the design of this feature, please see
// ForceHTTPS: Protecting High-Security Web Sites from Network Attacks
// Collin Jackson and Adam Barth
// In Proc. of the 17th International World Wide Web Conference (WWW 2008)
// Available at
const wchar_t kForceHTTPS[] = L”force-https”;

} // namespace switches
// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include “chrome/common/chrome_switches.h”

#include “base/base_switches.h”

namespace switches {

// Can’t find the switch you are looking for? try looking in
// base/ instead.

// Suppresses hang monitor dialogs in renderer processes.
const wchar_t kDisableHangMonitor[] = L”disable-hang-monitor”;

// Completely disables UMA metrics system.
const wchar_t kDisableMetrics[] = L”disable-metrics”;

// Enables the recording of metrics reports but disables reporting.
// In contrast to kDisableMetrics, this executes all the code that a normal
// client would use for reporting, except the report is dropped rather than sent
// to the server. This is useful for finding issues in the metrics code during
// UI and performance tests.
const wchar_t kMetricsRecordingOnly[] = L”metrics-recording-only”;

// Causes the browser process to throw an assertion on startup.
const wchar_t kBrowserAssertTest[] = L”assert-test”;

// Causes the renderer process to throw an assertion on launch.
const wchar_t kRendererAssertTest[] = L”renderer-assert-test”;

// Causes the browser process to crash on startup.
const wchar_t kBrowserCrashTest[] = L”crash-test”;

// Causes the renderer process to crash on launch.
const wchar_t kRendererCrashTest[] = L”renderer-crash-test”;

// Causes the renderer process to display a dialog on launch.
const wchar_t kRendererStartupDialog[] = L”renderer-startup-dialog”;

// Causes the plugin process to display a dialog on launch.
const wchar_t kPluginStartupDialog[] = L”plugin-startup-dialog”;

// Causes the test shell process to display a dialog on launch.
const wchar_t kTestShellStartupDialog[] = L”testshell-startup-dialog”;

// Specifies a command that should be used to launch the plugin process. Useful
// for running the plugin process through purify or quantify. Ex:
// –plugin-launcher=”path\to\purify /Run=yes”
const wchar_t kPluginLauncher[] = L”plugin-launcher”;

// The value of this switch tells the child process which
// IPC channel the browser expects to use to communicate with it.
const wchar_t kProcessChannelID[] = L”channel”;

// The value of this switch tells the app to listen for and broadcast
// testing-related messages on IPC channel with the given ID.
const wchar_t kTestingChannelID[] = L”testing-channel”;

// The value of this switch specifies which page will be displayed
// in newly-opened tabs. We need this for testing purposes so
// that the UI tests don’t depend on what comes up for
const wchar_t kHomePage[] = L”homepage”;

// When this switch is present, the browser will throw up a dialog box
// asking the user to start a renderer process independently rather
// than launching the renderer itself. (This is useful for debugging.)
const wchar_t kBrowserStartRenderersManually[] = L”start-renderers-manually”;

// Causes the process to run as renderer instead of as browser.
const wchar_t kRendererProcess[] = L”renderer”;

// Path to the exe to run for the renderer subprocess
const wchar_t kRendererPath[] = L”renderer-path”;

// Causes the process to run as a plugin subprocess.
const wchar_t kPluginProcess[] = L”plugin”;

// Causes the process to run as a worker subprocess.
const wchar_t kWorkerProcess[] = L”worker”;

// Runs the renderer and plugins in the same process as the browser
const wchar_t kSingleProcess[] = L”single-process”;

// Runs each set of script-connected tabs (i.e., a BrowsingInstance) in its own
// renderer process. We default to using a renderer process for each
// site instance (i.e., group of pages from the same registered domain with
// script connections to each other).
const wchar_t kProcessPerTab[] = L”process-per-tab”;

// Runs a single process for each site (i.e., group of pages from the same
// registered domain) the user visits. We default to using a renderer process
// for each site instance (i.e., group of pages from the same registered
// domain with script connections to each other).
const wchar_t kProcessPerSite[] = L”process-per-site”;

// Runs plugins inside the renderer process
const wchar_t kInProcessPlugins[] = L”in-process-plugins”;

// Runs the renderer outside the sandbox.
const wchar_t kNoSandbox[] = L”no-sandbox”;

// Runs the plugin processes inside the sandbox.
const wchar_t kSafePlugins[] = L”safe-plugins”;

// Excludes these plugins from the plugin sandbox.
// This is a comma-separated list of plugin library names and activex clsid.
const wchar_t kTrustedPlugins[] = L”trusted-plugins”;

// Runs the security test for the sandbox.
const wchar_t kTestSandbox[] = L”test-sandbox”;

// Specifies the user data directory, which is where the browser will look
// for all of its state.
const wchar_t kUserDataDir[] = L”user-data-dir”;

// Specifies the plugin data directory, which is where plugins (Gears
// specifically) will store its state.
const wchar_t kPluginDataDir[] = L”plugin-data-dir”;

// Use a specific disk cache location, rather than one derived from the
// UserDatadir.
const wchar_t kDiskCacheDir[] = L”disk-cache-dir”;

// Whether the multiple profiles feature based on the user-data-dir flag is
// enabled or not.
const wchar_t kEnableUserDataDirProfiles[] = L”enable-udd-profiles”;

// Specifies the path to the user data folder for the parent profile.
const wchar_t kParentProfile[] = L”parent-profile”;

// Specifies that the associated value should be launched in “application” mode.
const wchar_t kApp[] = L”app”;

// Specifies the file that should be uploaded to the provided application. This
// switch is expected to be used with –app option.
const wchar_t kAppUploadFile[] = L”upload-file”;

// Specifies if the dom_automation_controller_ needs to be bound in the
// renderer. This binding happens on per-frame basis and hence can potentially
// be a performance bottleneck. One should only enable it when automating
// dom based tests.
const wchar_t kDomAutomationController[] = L”dom-automation”;

// Tells the plugin process the path of the plugin to load
const wchar_t kPluginPath[] = L”plugin-path”;

// A string used to override the default user agent with a custom one.
const wchar_t kUserAgent[] = L”user-agent”;

// Specifies the flags passed to JS engine
const wchar_t kJavaScriptFlags[] = L”js-flags”;

// The Country we should use. This is normally obtained from the operating
// system during first run and cached in the preferences afterwards. This is a
// string value, the 2 letter code from ISO 3166-1.
const wchar_t kCountry[] = L”country”;

// The language file that we want to try to open. Of the form
// language[-country] where language is the 2 letter code from ISO-639.
const wchar_t kLang[] = L”lang”;

// Will add kDebugOnStart to every child processes. If a value is passed, it
// will be used as a filter to determine if the child process should have the
// kDebugOnStart flag passed on or not.
const wchar_t kDebugChildren[] = L”debug-children”;

// Will add kWaitForDebugger to every child processes. If a value is passed, it
// will be used as a filter to determine if the child process should have the
// kWaitForDebugger flag passed on or not.
const wchar_t kWaitForDebuggerChildren[] = L”wait-for-debugger-children”;

// Will filter log messages to show only the messages that are prefixed
// with the specified value
const wchar_t kLogFilterPrefix[] = L”log-filter-prefix”;

// Force logging to be enabled. Logging is disabled by default in release
// builds.
const wchar_t kEnableLogging[] = L”enable-logging”;

// Force logging to be disabled. Logging is enabled by default in debug
// builds.
const wchar_t kDisableLogging[] = L”disable-logging”;

// Sets the minimum log level. Valid values are from 0 to 3:
// INFO = 0, WARNING = 1, LOG_ERROR = 2, LOG_FATAL = 3.
const wchar_t kLoggingLevel[] = L”log-level”;

// Make plugin processes log their sent and received messages to LOG(INFO).
const wchar_t kLogPluginMessages[] = L”log-plugin-messages”;

// Dump any accumualted histograms to the log when browser terminates (requires
// logging to be enabled to really do anything). Used by developers and test
// scripts.
const wchar_t kDumpHistogramsOnExit[] = L”dump-histograms-on-exit”;

// enable remote debug / automation shell on the specified port
const wchar_t kRemoteShellPort[] = L”remote-shell-port”;

// Runs un-installation steps that were done by chrome first-run.
const wchar_t kUninstall[] = L”uninstall”;

// Number of entries to show in the omnibox popup.
const wchar_t kOmniBoxPopupCount[] = L”omnibox-popup-count”;

// The value of this switch tells the app to listen for and broadcast
// automation-related messages on IPC channel with the given ID.
const wchar_t kAutomationClientChannelID[] = L”automation-channel”;

// Indicates the last session should be restored on startup. This overrides
// the preferences value and is primarily intended for testing. The value of
// this switch is the number of tabs to wait until loaded before
// ‘load completed’ is sent to the ui_test.
const wchar_t kRestoreLastSession[] = L”restore-last-session”;

// Chrome supports a playback and record mode. Record mode saves *everything*
// to the cache. Playback mode reads data exclusively from the cache. This
// allows us to record a session into the cache and then replay it at will.
const wchar_t kRecordMode[] = L”record-mode”;
const wchar_t kPlaybackMode[] = L”playback-mode”;

// Don’t record/playback events when using record & playback.
const wchar_t kNoEvents[] = L”no-events”;

// Make Windows happy by allowing it to show “Enable access to this program”
// checkbox in Add/Remove Programs->Set Program Access and Defaults. This
// only shows an error box because the only way to hide Chrome is by
// uninstalling it.
const wchar_t kHideIcons[] = L”hide-icons”;

const wchar_t kShowIcons[] = L”show-icons”;

// Make Chrome default browser
const wchar_t kMakeDefaultBrowser[] = L”make-default-browser”;

// Use a specified proxy server, overrides system settings. This switch only
// affects HTTP and HTTPS requests.
const wchar_t kProxyServer[] = L”proxy-server”;

// Enable alternate proxy autoconfig implementation, which downloads PAC
// scripts internally and executes them using V8 (as opposed to fetching
// and executing using WinHTTP). This cannot be used in conjunction with
// –single-process.
const wchar_t kV8ProxyResolver[] = L”v8-proxy-resolver”;

// Chrome will support prefetching of DNS information. Until this becomes
// the default, we’ll provide a command line switch.
extern const wchar_t kDnsLogDetails[] = L”dns-log-details”;
extern const wchar_t kDnsPrefetchDisable[] = L”dns-prefetch-disable”;

// Enables support to debug printing subsystem.
const wchar_t kDebugPrint[] = L”debug-print”;

// Allow initialization of all activex controls. This is only to help website
// developers test their controls to see if they are compatible in Chrome.
// Note there’s a duplicate value in (to avoid
// dependency on chrome module). Please change both locations at the same time.
const wchar_t kAllowAllActiveX[] = L”allow-all-activex”;

// Browser flag to disable the web inspector for all renderers.
const wchar_t kDisableDevTools[] = L”disable-dev-tools”;

// Enable web inspector for all windows, even if they’re part of the browser.
// Allows us to use our dev tools to debug browser windows itself.
const wchar_t kAlwaysEnableDevTools[] = L”always-enable-dev-tools”;

// Used to set the value of SessionRestore::num_tabs_to_load_. See
// session_restore.h for details.
const wchar_t kTabCountToLoadOnSessionRestore[] =

// Enable dynamic loading of the Memory Profiler DLL, which will trace
// all memory allocations during the run.
const wchar_t kMemoryProfiling[] = L”memory-profile”;

// Configure Chrome’s memory model.
// Does chrome really need multiple memory models? No. But we get a lot
// of concerns from individuals about how the changes work on *their*
// system, and we need to be able to experiment with a few choices.
const wchar_t kMemoryModel[] = L”memory-model”;

// By default, cookies are not allowed on file://. They are needed in for
// testing, for example page cycler and layout tests. See bug 1157243.
const wchar_t kEnableFileCookies[] = L”enable-file-cookies”;

// Start the browser maximized, regardless of any previous settings.
const wchar_t kStartMaximized[] = L”start-maximized”;

// Spawn threads to watch for excessive delays in specified message loops.
// User should set breakpoints on Alarm() to examine problematic thread.
// Usage: -enable-watchdog=[ui][io]
// Order of the listed sub-arguments does not matter.
const wchar_t kEnableWatchdog[] = L”enable-watchdog”;

// Display the First Run experience when the browser is started, regardless of
// whether or not it’s actually the first run.
const wchar_t kFirstRun[] = L”first-run”;

// Enable histograming of tasks served by MessageLoop. See about:histograms/Loop
// for results, which show frequency of messages on each thread, including APC
// count, object signalling count, etc.
const wchar_t kMessageLoopHistogrammer[] = L”message-loop-histogrammer”;

// Perform importing from another browser. The value associated with this
// setting encodes the target browser and what items to import.
const wchar_t kImport[] = L”import”;

// Change the DCHECKS to dump memory and continue instead of displaying error
// dialog. This is valid only in Release mode when –enable-dcheck is
// specified.
const wchar_t kSilentDumpOnDCHECK[] = L”silent-dump-on-dcheck”;

// Normally when the user attempts to navigate to a page that was the result of
// a post we prompt to make sure they want to. This switch may be used to
// disable that check. This switch is used during automated testing.
const wchar_t kDisablePromptOnRepost[] = L”disable-prompt-on-repost”;

// Disable pop-up blocking.
const wchar_t kDisablePopupBlocking[] = L”disable-popup-blocking”;

// Don’t execute JavaScript (browser JS like the new tab page still runs).
const wchar_t kDisableJavaScript[] = L”disable-javascript”;

// Don’t enforce the same-origin policy. (Used by people testing their sites.)
const wchar_t kDisableWebSecurity[] = L”disable-web-security”;

// Prevent Java from running.
const wchar_t kDisableJava[] = L”disable-java”;

// Prevent plugins from running.
const wchar_t kDisablePlugins[] = L”disable-plugins”;

// Prevent images from loading.
const wchar_t kDisableImages[] = L”disable-images”;

// Use the low fragmentation heap for the CRT.
const wchar_t kUseLowFragHeapCrt[] = L”use-lf-heap”;

#ifndef NDEBUG
// Debug only switch to specify which gears plugin dll to load.
const wchar_t kGearsPluginPathOverride[] = L”gears-plugin-path”;

// Switch to load Gears in the renderer process.
const wchar_t kGearsInRenderer[] = L”gears-in-renderer”;

// Enable the fastback page cache.
const wchar_t kEnableFastback[] = L”enable-fastback”;

// Allow loading of the javascript debugger UI from the filesystem.
const wchar_t kJavaScriptDebuggerPath[] = L”javascript-debugger-path”;

const wchar_t kDisableP13n[] = L”disable-p13n”;

// Enable support for SDCH filtering (dictionary based expansion of content).
// Optional argument is *the* only domain name that will have SDCH suppport.
// Default is “-enable-sdch” to advertise SDCH on all domains.
// Sample usage with argument: “”
// SDCH is currently only supported server-side for searches on
const wchar_t kSdchFilter[] = L”enable-sdch”;

// Enable user script support.
const wchar_t kEnableUserScripts[] = L”enable-user-scripts”;

// Enable extensions.
const wchar_t kEnableExtensions[] = L”enable-extensions”;

// Install the extension specified in the argument. This is for MIME type
// handling so that users can double-click on an extension.
const wchar_t kInstallExtension[] = L”install-extension”;

// Load an extension from the specified directory.
const wchar_t kLoadExtension[] = L”load-extension”;

// Load an NPAPI plugin from the specified path.
const wchar_t kLoadPlugin[] = L”load-plugin”;

// Causes the browser to launch directly in incognito mode.
const wchar_t kIncognito[] = L”incognito”;

// Turn on the old implementation of SafeBrowsing which may have performance
// problems on some computers during updates.
const wchar_t kUseOldSafeBrowsing[] = L”old-safe-browsing”;

// Turns on the accessibility in the renderer. Off by default until
// http://b/issue?id=1432077 is fixed.
const wchar_t kEnableRendererAccessibility[] = L”enable-renderer-accessibility”;

// Enable HTML5 Video/Audio tag support
const wchar_t kEnableVideo[] = L”enable-video”;

// Pass the name of the current running automated test to Chrome.
const wchar_t kTestName[] = L”test-name”;

// On POSIX only: the contents of this flag are prepended to the renderer
// command line. (Useful values might be “valgrind” or “gdb –args”)
const wchar_t kRendererCmdPrefix[] = L”renderer-cmd-prefix”;

// On POSIX only: use FIFO for IPC channels so that “unrelated” process
// can connect to a channel, provided it knows its name. For debugging purposes.
const wchar_t kIPCUseFIFO[] = L”ipc-use-fifo”;

} // namespace switches

Removing the ‘Send Feedback’ Link from your Windows 7 Beta or Windows Server 2008 R2 Beta

Create a .reg text file with he following content and add it to the registry by doubleclicking it:

Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Control Panel\Desktop]


Now log off and back on, and the link is gone 🙂

Error -2147024891 in Exchange 2007 Management Console

I came across an excellent post (or comment really) that solved my Exchange 2007 Management Console error message in an instant. I thought about saving it somewhere, and since the original poster of the solution has a WordPress blog, here I am 🙂

On XP/2003 box set following thing.

Run -> dcomcnfg -> Component Services -> Computers -> My Computer -> Properties ->Change “Default Impersonation Level” from Identify to Impersonate. Open the Exchange 2007 Management Console.

Original URL with solution:

And here’s Amir Tank’s blog about Microsoft Exchange:

%d bloggers like this: