下载中文资源文件ChineseSimplified.isl
Inno Setup中文支持并非官方翻译,所以在官方安装包中并未包含中文资源。
拷贝ChineseSimplified.isl文件至Languages目录
将ChineseSimplified.isl文件拷贝至Inno Setup软件安装目录下的Languages目录内。
ChineseSimplified.islInno Setup中文支持并非官方翻译,所以在官方安装包中并未包含中文资源。
ChineseSimplified.isl文件至Languages目录将ChineseSimplified.isl文件拷贝至Inno Setup软件安装目录下的Languages目录内。
鉴于VSCode都用inno setup打包了,个人就学习一下用inno做安装包的简易操作
SimplestSetup.iss.iss文件中:1 |
|
Inno Setup Compiler打开.iss文件,若安装时,关联了.iss文件,可以直接双击打开HelloWorldSetup.exe安装包将生成到用户文档目录下的Inno Setup Examples Output目录中本文针对Wix制作**中文安装包(.msi)**中的一些内容进行整理 —— 其他语言类似
本文采用Visual Studio构建安装包 —— 推荐,因为足够方便。
示例源码
Cultures属性zh-CN添加到项目的Cultures属性中【可以添加多种语言支持,以分号 ; 分隔】。
.wixproj项目文件内容,添加如下代码:1 |
|
WixUIExtension.dll引用Wix安装包中基本流程的本地化资源已经打包至WixUIExtension.dll,引用此文件,即可在安装流程中显示中文流程。
见官方代码:https://github.com/wixtoolset/wix3/blob/master/src/ext/UIExtension/wixlib/WixUI_zh-CN.wxl
Product的Language属性此值设置与否,并不影响中文安装包打包,不过既然做中文包,就做的彻底一些。
Product的Language的默认值为1033,其为en-us的LCID,将其值改为2052,即zh-cn。
1 |
|
Package的SummaryCodepage属性MSI属性 详细信息显示中文
将Package的SummaryCodepage属性设置为936;
1 |
|
设置此属性的作用,是让MSI安装包的属性-详细信息显示中文。
如下图,若不配置SummaryCodepage,作者信息显示不了中文:
当未配置SummaryCodepage时,作者信息显示 Test,而非 Test中文。
在WPF应用设计中,常常需要在主窗口之前设置一个前置登录窗口,为此整理了一下可行的方案。
示例源码:Jess.Sample.LoginWindow
Program.cs,模仿Winform初始代码不做整理,个人不推荐,既然用了WPF,就尽量不把Winform的东西引入进来。
此方案相对局限,若单纯只有个登录操作,可以使用此法 —— 可依据需要调整
InitializeComponent();的先后顺序。
1 |
|
Application的OnStartup方法注意事项:
- 在
OnStartup中关闭窗体,会导致进入不了主窗体,因此需要手动控制ShutdownMode【默认值:ShutdownMode.OnLastWindowClose】- 不得在
App构造函数中,进行UI显示操作,因为这会导致一些锁的释放,引发OnStartup提前触发【OnStartup是在Application的构造函数中异步调用的】
官方Window.cs源码的窗体关闭流程中有一段以下代码:
1 |
|
由此可见,默认情况下,在OnStartup中调用关闭窗体,会直接导致Shutdown的调用。
鉴于此,主要有以下修改方式【只要避免内部调用Shutdown即可】:
保证登录窗体关闭时,不会满足
Shutdown调用条件
Shutdown:使用ShutdownMode.OnExplicitShutdown,在需要退出应用时,调用App.Current.Shutdown();ShutdownMode:登录前改为ShutdownMode.OnExplicitShutdown,窗体关闭后,恢复为ShutdownMode.OnLastWindowClose;MainWindow,手动启动MainWindow,不在依赖StartupUri。ShutdownApp.Current.Shutdown()。1 |
|
1 |
|
ShutdownModeShutdownMode即可:1 |
|
MainWindowApp.xaml文件中是StartupUri属性设置。1 |
|
在上面前两种的OnStartup的处理中,有个隐藏的问题,他们仍然会去创建MainWindow。如果想避免初始化MainWindow,有以下两种方式:
Shutdown之后调用Environment.Exit(0);,强制退出。Application的OnNavigating方法,设置事件参数的Cancel属性。1 |
|
掘:奇葩史
旧地址:https://www.shisujie.com/blog/Google-ProtoBuf-vs-ProtoBuf-Net
protobuf全称Protocol Buffers,由Google推出的一种平台、语言无关的数据交互格式。
由于公司项目开发中,使用了WCF,其默认数据序列化是DataContractSerializer,采用xml格式,考虑到性能提升,于是采用了protobuf。
protobuf的.net实现主要有两个版本:
1 |
|
类似于.net中的类结构描述
1 |
|
命令行中执行如下代码:
1 |
|
或者参考如下powershell脚本内容:
将脚本内容保存到项目目录下,直接执行ps1文件。
1 |
|
1 |
|
更多使用示例,见本文开头源码链接。
1 |
|
- protobuf-net作者同时提供了Protogen工具,可以直接使用.proto文件生成以下类。
1 |
|
1 |
|
更多使用示例,见本文开头源码链接。
性能测试工具使用:BenchmarkDotNet
直接传入MemoryStream的WriteTo扩展方法,其实是官方内部封装了CodedOutputStream —— 从性能数据上看,也是无差别的。
1 |
|
| Method | Mean | Error | StdDev | Median | Rank |
|---|---|---|---|---|---|
| Google.ProtoBuf使用MemoryStream | 789.7 ns | 15.72 ns | 46.36 ns | 775.3 ns | 2 |
| Google.ProtoBuf使用MemoryStream嵌套CodedOutputStream | 799.6 ns | 16.14 ns | 46.81 ns | 791.6 ns | 2 |
| protobuf-net使用MemoryStream | 491.7 ns | 7.13 ns | 6.32 ns | 488.8 ns | 1 |
1 |
|
| Method | Mean | Error | StdDev | Rank |
|---|---|---|---|---|
| Google.ProtoBuf使用FileStream | 460.3 μs | 14.65 μs | 43.18 μs | 1 |
| protobuf-net使用FileStream | 457.9 μs | 15.37 μs | 45.31 μs | 1 |
1 |
|
| Method | Mean | Error | StdDev | Rank |
|---|---|---|---|---|
| Google.ProtoBuf使用FileStream | 249.8 μs | 4.97 μs | 10.15 μs | 1 |
| protobuf-net使用FileStream | 260.5 μs | 4.84 μs | 9.88 μs | 2 |
上方是简易数据结构性能,下方是相对复杂一些的数据结构性能
注意事项【一些坑】:
- proto3移除了required,对于required的作用,其实争议很大。proto3更加追求极简。
- 但在我的之前遇到的情况,bool和enum未赋值的情况下,序列化时,默认值是有问题的。所以,单纯.net环境下,目前还是推荐proto2吧。
_:proto文件中下划线表示下划线后一个字母为大写。生成的类中,属性是无法带有下划线的。- 官方建议属性定义均用小写。
1 |
|
| Method | Mean | Error | StdDev | Rank |
|---|---|---|---|---|
| Google.ProtoBuf使用FileStream | 470.3 μs | 17.45 μs | 51.47 μs | 1 |
| protobuf-net使用FileStream | 466.9 μs | 14.68 μs | 43.28 μs | 1 |
1 |
|
| Method | Mean | Error | StdDev | Rank |
|---|---|---|---|---|
| Google.ProtoBuf使用FileStream | 281.3 μs | 7.42 μs | 21.88 μs | 1 |
| protobuf-net使用FileStream | 283.1 μs | 5.64 μs | 13.29 μs | 1 |
由此可见,两个库直接性能差距并不是很大,鉴于个人的使用场景,更加推荐protobuf-net。
掘:奇葩史