我正在使用SmartAssembly进行一般代码混淆以及应用程序中的错误报告。
如果我的应用程序遇到未经处理的异常,我希望记录异常,然后在没有任何用户交互的情况下终止应用程序。是否可以创建一个允许这样做的智能装配项目?
我尝试在 SmartAssembly GUI 以及命令行中设置项目,但没有运气。以下是我尝试过的命令和参数,但到目前为止,我无法确定如何让它在没有用户输入的情况下终止应用程序并记录错误。
创建 SA 项目:
"C:Program FilesRed GateSmartAssembly 6SmartAssembly.com"
/create shell.saproj input=C:RepositoriesMyAppsrcshell.exe
/output=shell.exe
/reportappname="MyTestApp"
/errorreportingtemplate=standard;continueonerror=false,email:"my@email.com"
/reportprojectname="Shell"
/reportcompanyname="My Company"
构建项目:
"C:Program FilesRed GateSmartAssembly 6SmartAssembly.com" /build shell.saproj
SmartAssembly 包含一些自定义错误报告模板的示例,
位于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
的引用(。
编辑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();
}
如果您感到困惑,这是最终结果的要点。
使用 GUI 或通过 cmd 创建项目文件:
"C:Program FilesRed GateSmartAssembly 6SmartAssembly.com"
/create shell.saproj input=C:RepositoriesMyAppsrcshell.exe
/output=shell.exe
/reportappname="MyTestApp"
/errorreportingtemplate=MySmartAssemblyLogger.dll;continueonerror=false,email:"my@email.com"
/reportprojectname="Shell"
/reportcompanyname="My Company"
使用 GUI 或通过 cmd 构建:
"C:Program FilesRed GateSmartAssembly 6SmartAssembly.com" /build shell.saproj
根据网站上的例子 http://www.red-gate.com/supportcenter/Content/SmartAssembly/help/6.7/SA_UsingTheCommandLine
您应该将"标准"替换为"自动",这应该在不显示用户对话框的情况下发送错误报告。