Мой стандартный отказ от ответственности: я являюсь разработчиком этого продукта.
Используя продукт (Runtime Intelligence), написанный компанией, в которой я работаю (PreEmptive Soltutions), вы можете внедрить не только сообщения об ошибках, но и возможностьчтобы отслеживать, когда пользователи используют ваши приложения и какие функции они используют с минимальным кодированием.
Используя Dotfuscator для выполнения внедрения кода (или ткачества IL), мы вставляем новый код в двоичные файлы вашего приложения, который отправляет данные об использовании обратно всервер, размещенный на нашем объекте (или, по желанию, на любой другой произвольный URL). Если вы отправляете нам данные, мы предоставляем вам ряд мощных инструментов анализа и отчетов об использовании.
Базовая версия этой функции должна быть включена в Visual Studio 2010, а также получить доступ к бесплатным данным. портал отчетности (но без SLA, гарантий хранения данных или конфиденциальности данных).
Возможность отправки произвольных данных вместе с информацией об использовании ограничена коммерческим продуктом, но вы можете связаться с PreEmptive Soltutions для полнойфункциональная, ограниченная по времени оценочная версия.
Сообщение об ошибке можно выполнить с помощью приведенного ниже примера кода:
public partial class app : Application {
// field to temporarily store exception data
private Exception exp;
void AppStartup(object sender, StartupEventArgs args) {
// add a handler to catch any unhandled exceptions
this.DispatcherUnhandledException += new DispatcherUnhandledExceptionEventHandler(ErrorHandler);
Window1 mainWindow = new Window1();
mainWindow.ShowDialog();
}
// this will prompt the user if they want to report the exception
void ErrorHandler(object sender, DispatcherUnhandledExceptionEventArgs e) {
this.exp = e.Exception;
if (MessageBox.Show("A " + exp.Message + " exception happened, should I report it?", "Error Occurrend", MessageBoxButton.YesNo) == MessageBoxResult.Yes) {
ErrorHappened();
e.Handled = true;
}
}
// this method is called by the above ErrorHandler method and when run through Dotfuscator additional code will be injected into this method that will send a usage data message back to the server and the data in the dictionary (which will be exception data) returned by the ErrorData method will be included into the message and be stored and reported on the server
[Feature("Exception", EventType = FeatureEventTypes.Tick, ExtendedKeySourceElement = SourceElements.Method, ExtendedKeySourceName = "ErrorData")]
private void ErrorHappened() {
// This is here as a placeholder for the exception feature attribute which will exit the application when executed
AppShutdown(true);
}
// this method takes the exception data from the exp field and returns it as a dictionary of name/value pairs
public Dictionary<string, string> ErrorData() {
var retval = new Dictionary<string,string>();
if (null != exp) {
retval.Add("Error Message",exp.Message);
retval.Add("Stack Trace",exp.StackTrace);
}
return retval;
}
}