2013-10-11 3 views
1

Я использую SmartAssembly для обфускации общего кода, а также для сообщения об ошибках в приложении.Автоматически регистрировать ошибку и прекращать применение с помощью SmartAssembly

Если мое приложение встречает необработанное исключение, я хотел бы, чтобы исключение регистрировалось, а затем завершало приложение без какого-либо взаимодействия с пользователем. Можно ли создать проект SmartAssembly, который позволяет это?

Я пробовал настроить проект в графическом интерфейсе SmartAssembly, а также на the command-line без везения. Ниже приведена команда и аргументы, которые я пробовал, но до сих пор я не могу определить, как заставить его как прекратить приложение, так и зарегистрировать ошибку без ввода пользователем.

Создать SA Проект:

"C:\Program Files\Red Gate\SmartAssembly 6\SmartAssembly.com" 
/create shell.saproj input=C:\Repositories\MyApp\src\shell.exe 
/output=shell.exe 
/reportappname="MyTestApp" 
/errorreportingtemplate=standard;continueonerror=false,email:"[email protected]" 
/reportprojectname="Shell" 
/reportcompanyname="My Company" 

Создание проекта:

"C:\Program Files\Red Gate\SmartAssembly 6\SmartAssembly.com" /build shell.saproj 

ответ

2

SmartAssembly включает несколько примеров пользовательских ErrorReportingTemplates,
расположен в Red Gate/SmartAssembly 6/SDK/Exception Reporting/

Эти примеры сосредоточенными в несколько категорий:

Without UI Standard Custom UI Via Email Secured Proxy Silverlight Silverlight Basic

В каждой из этих папок есть файл .csproj, который можно расширить, чтобы получить желаемые результаты. Внутри папки Without UI является проектом мы после того, как под названием Sample 01 - Without User Interface.csproj

Если вы только после .dll использовать и не заботиться о многоразовом решении, редактировать этот файл и использовать полученный .dll файл (альтернативой является создание нового проекта и ссылка на SmartAssembly.SmartExceptionsCore).

Edit функция OnReportException, чтобы выглядеть следующим образом:

protected override void OnReportException(ReportExceptionEventArgs e) 
    { 
     for (int i=0; i<3; i++) 
     { 
      if (e.SendReport()) break; 
     } 
     e.TryToContinue = false; 
     System.Diagnostics.Process proc = System.Diagnostics.Process.GetCurrentProcess(); 
     proc.Kill(); 
    } 

Here's a Gist of the final result, если вы запутались.

Создание файла проекта с графическим интерфейсом или с помощью CMD:

"C:\Program Files\Red Gate\SmartAssembly 6\SmartAssembly.com" 
/create shell.saproj input=C:\Repositories\MyApp\src\shell.exe 
/output=shell.exe 
/reportappname="MyTestApp" 
/errorreportingtemplate=MySmartAssemblyLogger.dll;continueonerror=false,email:"[email protected]" 
/reportprojectname="Shell" 
/reportcompanyname="My Company" 

сборки с GUI или с помощью CMD:

"C:\Program Files\Red Gate\SmartAssembly 6\SmartAssembly.com" /build shell.saproj 
0

Согласно примеру, на сайте http://www.red-gate.com/supportcenter/Content/SmartAssembly/help/6.7/SA_UsingTheCommandLine

Вы должны заменить "стандарт" с " auto ", и он должен отправить отчет об ошибке без нас er.

+0

Использование 'auto' автоматически регистрируются ошибки, но я не мог найти правильная настройка для дополнительного завершения приложения без взаимодействия с пользователем. – jdhurst

Смежные вопросы