我正在使用SmartAssembly进行常规代码混淆以及应用程序中的错误报告。
如果我的应用程序遇到未处理的异常,我希望记录异常,然后在没有任何用户交互的情况下终止应用程序。是否可以创建一个允许这个的SmartAssembly项目?
我已经尝试在SmartAssembly GUI中设置项目,并且在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:"my@email.com"
/reportprojectname="Shell"
/reportcompanyname="My Company"
构建项目:
"C:\Program Files\Red Gate\SmartAssembly 6\SmartAssembly.com" /build shell.saproj
答案 0 :(得分: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
)。
编辑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,如果你感到困惑。
使用GUI或通过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:"my@email.com"
/reportprojectname="Shell"
/reportcompanyname="My Company"
使用GUI或通过cmd进行构建:
"C:\Program Files\Red Gate\SmartAssembly 6\SmartAssembly.com" /build shell.saproj
答案 1 :(得分:0)
根据网站http://www.red-gate.com/supportcenter/Content/SmartAssembly/help/6.7/SA_UsingTheCommandLine
上的示例您应该将“standard”替换为“auto”,并且应该在没有出现用户对话框的情况下发送错误报告。