SQLite密码添加移除

旧地址:http://blog.canself.com/sqlitepwdaddandremove/

背景:电脑清理——个人洁癖

SQLite的最原始的是没有加密的,从而衍生了多种加密算法,但在平常使用中使用System.Data.Sqlite,但其加密后,一般都需要要单独的sqlite管理器——像我之前用SQLite Developer破解版的。但自己又装了Navicat——可以连多种数据【问题来了——无法打开上面加密的Sqlite数据库】

自己电脑不咋地,不想装有重复性功能的软件,为此,简单弄个小工具,把Sqlite的密码给弄掉,然后再用Navicat连,弄完再把密码设上去。虽然中间看似多了几步,但个人感觉这样电脑干净点——有洁癖。

想想还是给个图吧:

下面附上下载地址:【代码就不托管和上传,小工具弄起来多余-需要者可以联系】

城通网盘下载119G网盘下载

关于UltraISO打开iso文件后只有部分文件问题

旧地址:http://blog.canself.com/ultraiso_lostfile/

背景:在安装CentOS 7的时候,用UltraISO打开之后,只有一个EFI文件,刻完U盘,却无法引导。

之前还以为偶没下载全,就又下了一遍,还好偶搞得的NetInstall,要不然就呵呵了。

解决:将UltraISO升级至最新版,有些版本确实会有此问题。下载的ISO加载到虚拟光驱查看,其实可以看到全部文件的——即使是老版本。

Dropbox应用开发

旧地址:http://blog.canself.com/dropbox_coreapi_net/

一个牛逼的云存储、云平台当然有针对它的开发,个人学.NET的,简要的做一下利用.NET的开发介绍。【Dropbox有中文版,但开发文档只有英文的哦,记得打开字典哦 😉】

  • 开发者网站:https://www.dropbox.com/developers
  • 应用连接方式:
    • Drop-ins
    • Dropbox API(Core API)——个人示例
    • Sync API/Datastore API——据说已经淘汰

开发步骤:

1、在Dropbox中添加一个新的app,此处我们选择Dropbox API app,选择相应选项后起个app名,创建新APP即可。

2、创建完成后配置一些属性。其中App key和App secret是自己开发所需要标识自己应用的。OAuth2中设置重定向地址,只有添加了之后,开发应用才能使用

注:OAuth 2 需要使用https的网页地址——除了localhost【一些额外的知识:ssl部署webbrowser使用https

3、官方提供了许多Core API的支持,但是C#却没有,只有第三方的,但官方也给了其连接地址【我使用的DropboxRestAPI,项目地址里其实已经有如何使用的啦】


代码下载:【记得修改其中有app key和app secret,改为自己的】,内容做的还比较粗,进一步完善看代码托管网站上的代码。

下载地址20150718:城通网盘下载119G网盘

托管地址:https://github.com/ShiJess/WebDriveAPI

Dropbox——鼻祖级网盘

旧地址:http://blog.canself.com/dropbox/

介绍Dropbox的文章有很多了,在此只是个人整理,以便自己查看比较。

说起来,Dropbox文章不少,但由于在墙外,其并不是大众所知的,能用起来的更少了。【个人也只是玩玩,用的也比较少,毕竟。。。】

  • 网站地址:https://www.dropbox.com ——偷偷用的邀请链接😀
  • 支持平台:
    • Web版(支持)
    • PC端:
      • Windows(已经到支持到10啦)
      • OS X(Mac)
      • Linux(包括Debian、Ubuntu)
    • 移动端:
      • Android(官方下载在Google Play,能不能下就看本事了)
      • iPhone、iPad
      • BlackBerry(国内做此平台支持的现在好像比较少了)
      • Kindle Fire(比较前卫哦)
      • Windows Phone(2015年年初开始支持的吧)
      • Windows平板(商店里好像不好用)
    • 注意:在许多商店里会看到有人说。。。不好用,关键要理解其在墙外,一般搞不定的人还是不要用的好。
  • 网盘容量:
    • 初始:2G(相对国内比较少)
    • 简单任务升级:1.38G(自己的,现在已经不确定能加多少了)
    • 邀请升级:上限16G(邀请与被邀请都可额外获得500M哦)
    • 付费升级:1T(每月US$9.99)
  • 安全:
    • 可以使用两步验证
    • 另外可以自己看看官方的服务条款和隐私政策(会有所收获哦)
    • 注册后可以删除账户(实在不想用就删掉吧)
  • 语言位置:支持中文——墙外
  • 建立时间:2007.6(可以说是鼻祖级啦)
  • 外链支持:支持(一直有效,固定)
  • 历史版本:支持(可以找到历史版本哦,防止误操作)
  • 特有功能:
    • 2015-07-17止——个人了解
    • 文件请求(下面单独说明功能详情)
  • 其他产品:
    • Carousel——照片管理
    • Mailbox
  • 开发者:开发简介

文件请求:——像他人请求你需要的文件

添加文件请求后,可以将链接发给人员A,然后A打开链接即可上传文件,A不需要有Dropbox账号。——适用于像别人索要集体活动照片等。。。


墙外东东不要多玩哦。。。未满13岁请勿玩Dropbox
最后附一张自己注册的邮件图片——求虐,博主90的,比比注册时间(2011-11-26)😊

WebBrowser控件打开https站点

旧地址:http://blog.canself.com/webbrowser_https/

背景:

与上一篇博文一样,此文亦是由于开发DropboxAPI中遇到问题衍生出来的。由于需要重定向https类型网站,但自己的https证书是自签名的,总是提示‘网站的安全证书存在问题’。

鉴此,查了些许资料,然而许多方法对我并没有什么卵用,不过以后还是可用用上的,故整理下【当然其中也有一些有效的方法】

首先,自己使用的是WPF中的WebBrowser

1、设置ServicePointmanager的验证回调,然而,这方法只能用于httprequest等托管代码中,webbrowser实现并不适用。代码如下:

1
2
3
4
5
6
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);

public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
}

2、在1无效的情况下,又有些朋友说要设置ScriptErrorsSuppressed属性为true,然而wpf中的webbrowser并没有此属性,故有以下方法添加相似设置。【注意:此方法应该是正对脚本执行的】

  • 方法一:【 SetSilent方法调用据说要放在webbrowser的Navigated的事件中】
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static void SetSilent(WebBrowser browser, bool silent)
{
FieldInfo fiComWebBrowser = typeof(WebBrowser).GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic);
if (fiComWebBrowser == null)
return;
object objComWebBrowser = fiComWebBrowser.GetValue(browser);
if (objComWebBrowser == null)
return;
objComWebBrowser.GetType().InvokeMember("Silent", BindingFlags.SetProperty, null, objComWebBrowser, new object[] { silent });
}



SetSilent(sender as WebBrowser, true);
  • 方法二:【 SetSilent方法调用据说要放在webbrowser的Navigated的事件中】
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
        public static void SetSilent(WebBrowser browser, bool silent)
{
if (browser == null)
throw new ArgumentNullException("browser");

// get an IWebBrowser2 from the document
IOleServiceProvider sp = browser.Document as IOleServiceProvider;
if (sp != null)
{
Guid IID_IWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046");
Guid IID_IWebBrowser2 = new Guid("D30C1661-CDAF-11d0-8A3E-00C04FC9E26E");

object webBrowser;
sp.QueryService(ref IID_IWebBrowserApp, ref IID_IWebBrowser2, out webBrowser);
if (webBrowser != null)
{
webBrowser.GetType().InvokeMember("Silent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.PutDispProperty, null, webBrowser, new object[] { silent });
}
}
}


[ComImport, Guid("6D5140C1-7436-11CE-8034-00AA006009FA"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
private interface IOleServiceProvider
{
[PreserveSig]
int QueryService([In] ref Guid guidService, [In] ref Guid riid, [MarshalAs(UnmanagedType.IDispatch)] out object ppvObject);
}




SetSilent(sender as WebBrowser, true);
  • 方法三:
1
2
3
4
5
6
7
8
9
WebBrowser t = sender as WebBrowser;

dynamic activeX = t.GetType().InvokeMember(
"ActiveXInstance",
BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.NonPublic,
null,
t,
new object[] { });
activeX.Silent = true;

然而wpf设置了好像没啥用,转而使用winform试试,直接就可以设置ScriptErrorsSuppressed,不过问题来了,设置为true之后,不弹窗了,但我想点的是弹窗的‘是(Y)’啊,设置之后直接就相当于选‘否(N)’了。

不过,网上还有人说要用AxWebBrowser,我也就加了个com试试,不同的是其中设置的是Silent属性,效果和winform基本一样。。。

【注:】wpf与winform中的webbrowser还有一点不一样,wpf用的ie版本好像比较高,https证书不对时直接在页面内显示,而winform中ie版本应该比较低,https证书不对时直接弹窗。

下面就是有效的方法啦:

1、用winform中的webbrowser,自动点击‘是’【使用window api】

1
2
3
4
5
6
7
8
9
10
[DllImport("user32.dll")]
public extern static int FindWindow(string lpclassname, string lpwindowname);

[DllImport("user32.dll")]
public extern static void SetForegroundWindow(int handle);


int iHandle = FindWindow(null, "安全警报");
SetForegroundWindow(iHandle);
System.Windows.Forms.SendKeys.SendWait("Y%");

2、最后一种是自己解决遇到的问题的方法:

使用wpf中的webbrowser,在webbrowser的Navigating事件中,判断当前的uri,自动换为非http的uri

1
(sender as WebBrowser).Navigate(http://www.xxx.com);

若有其他解决方案,欢迎联系。


相关问题地址:

如何禁用“安全警报”窗口中Webbrowser控件

Is it possible to use ServicePointManager with Webbrowser control?

WPF WebBrowser control – how to supress script errors?

How to disable “Security Warning” window in Webbrowser control

SSL 支持-使用 .NET Framework 2.0 在您的应用程序中支持证书

在IIS上部署SSL

旧地址:http://blog.canself.com/iis_ssl/

背景:

在处理DropboxAPI开发时,其重定向的URL地址必须是https的【除了localhost】,不得已在自己网站上加了ssl,下面简单介绍下添加自签名证书,毕竟只是临时使用。

1、打开IIS管理器

2、切换至下图所示页面,选中‘服务器证书’,双击进入

3、鉴于自己临时使用,选择右侧‘创建自签名证书…’打开如下界面:

4、填写完成点击确定即可在证书列表中看到当前添加的证书。

5、选择需要使用证书的网站,进入如下界面,点击右侧‘绑定’,然后添加,类型选择https,填写对应主机名,ssl证书选择刚刚添加的证书,点击确定即可。

6、添加完成后,在对应网站的ssl设置中设置启动SSL,如下图:

7、完成后,即可使用https方式访问自己的网站啦,不过由于使用自签名证书,不受浏览器信任,会出现如下界面,点击继续浏览即可。

WordPress搭建——Window Live Writer离线发布问题

旧地址:http://blog.canself.com/wordpress_wlw/

首次利用WLW发布时,遇到500问题了。【本人使用Windows Server 2012】

1、问题如下:

服务器报告以下网址出错:

http://blog.canself.com/xmlrpc.php

500 Internal Server Error

【注:以下插件(步骤2)不建议装,因为偶装了在卸载之后,就说偶的xmlrpc是禁用的,但跳过此步骤,直接跳至3的话,不会说xmlrpc禁用——在之前的那次偶就这样过来的。。。不过偶傻傻的回滚磁盘了,重新找了问题,还木有找到原因。。。】

2、经查找,说直接到设置—撰写里打开xmlrpc就行了,但就是木有找到这个选项,后来就选择装插件“Control XML-RPC publishing”,这样就可以打开xmlrpc啦,但仍然会报告上述错误,唯一的不同是,之前wlw发布不到博客上,现在是已经发上去了之后继续报500问题。哎。。。

3、无奈之下,只能选择最后一招了,利用IIS中的Web平台安装程序,选择安装php。【这招还是之前处理看到Web平台安装可以直接安装php,不用自己配,觉得新鲜装的,然后,wlw就不报500了】【所以呢——上面500问题很有可能是php配置问题,偶木有找到,希望有人能找到啦】

4、装完继续用wlw就会出现以下问题:【Invalid Response document】

从日志服务器接收的对 metaWeblog.editPost 方法的响应无效:

Invalid response document returned from XmlRpc server

注:其中“metaWeblog.editPost ”问题不定,我第一次遇到的是“blogger.getUsersBlogs”方法相应无效

然后此处问题解决方法就要方便的多

修改wp-includes目录下的class-IXR.php文件,

在以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function output($xml)
{
$charset = function_exists('get_option') ? get_option('blog_charset') : '';
if ($charset)
$xml = '<?xml version="1.0" encoding="'.$charset.'"?>'."\n".$xml;
else
$xml = '<?xml version="1.0"?>'."\n".$xml;
$length = strlen($xml);
header('Connection: close');
header('Content-Length: '.$length);
if ($charset)
header('Content-Type: text/xml; charset='.$charset);
else
header('Content-Type: text/xml');
header('Date: '.date('r'));
echo $xml;
exit;
}

1
2
3
4
5
6
// 将
$length = strlen($xml);

// 改为
$length = strlen($xml)+3;

这个据说是因为wordpress的编码(utf-8)与wlw的编码(utf-8+)不一样导致的。

WordPress博客搭建——PHP安装+IIS处理

旧地址:http://blog.canself.com/wordpress_Environment/

第一次自己搞服务器,安装php,还是有点迷茫的。

首先是下载php,打开下载网站 http://windows.php.net/download。

看到如此多的版本,瞬间凌乱了,就此上网查了查windows server上用啥版本,最后确定用非线程安全的版本。自己买的服务器是64为的,下了个64位非安全版。

接下来,就上网找了下php+iis配置,照样来

1、先将下载的压缩包解压到C:\php目录,一开始傻傻的以为只能这样弄,后来感觉这样只能这样就太弱智了,就试了下,随便解压到那个路径都可以【不要傻傻的弄到系统相关的文件夹下哦】,现在的路径就是D:\..\php啦,又觉得世界多彩啦。

2、修改配置文件

将php.ini-development改名为php.ini,然后就各种模块修改啦

当时查到的主要有:

1
2
3
4
5
6
7
8
9
data.timezone=”Asia/Shanghai”

extension=php_gd2.dll

extension=php_mbstring.dll

extension=php_mysql.dll

extension=php_pdo_mysql.dll

另外就是将extension_dir=改为 extension_dir= “D:\..\php\ext\”

这样php就算搞定啦,另外的扩展,有待慢慢研究,毕竟木有学过php。。。。

3、接下来就是安装CGI,安装完添加模块映射,在iis中处理程序映射——添加模块映射

PDF解析记录——Pdfbox

旧地址:http://blog.canself.com/pdfbox/

此文仅作记录【嫌放电脑里碍事-_-😀】,内容为以前收集的一小段代码。

下面为pdf获取文本的简要代码片段:

1
2
3
4
5
6
private string GetPDFText(string filename)
{
PDDocument pdf = PDDocument.load(filename);
PDFTextStripper pdftext = new PDFTextStripper();
return pdftext.getText(pdf);
}

其中对于旧版本,如pdfbox0.7.3版本,对于一些pdf解析会有问题,例如提示“Unknown encoding for ‘UniGB-UC32-H’”。而将dll换成新的如pdfbox-1.8.2。就可避免此问题【此处本人是通过nuget添加的引用-Pdfbox.1.1.1】。

至于想要其他新版本,可以自己通过pdfbox官网步骤自行生成

教程地址:http://pdfbox.apache.org/building.html


此技术后期很可能不会继续深究(用到再说吧),仅作技术学习路上的留下的一点痕迹。🐌

WPF之MVVM(Step4)——使用Prism(2)

旧地址:http://blog.canself.com/mvvm_prism2/

上一篇简单介绍使用Prism中的NotificationObject,以及DelegateCommand。这一篇更是简单,仅仅描述下DelegateCommand<T>如何使用。

ICommand接口一开始提供的就是带参数的方法,而我们使用时经常会遇到那个参数毫无用处的情况,Prism也就帮了偶们一把啦。当然,Prism并没有忘记我们有时还是要参数滴。

在定义上,我们使用ICommand定义,DelegateCommandDelegateCommand<T>一样。在实例化时有所区别,当然在界面绑定时亦有区别,详细如下:

1
TestParameterCommand = new DelegateCommand<string>(TestParameter);
1
2
3
4
private void TestParameter(string para)
{
TestStr = para + "para";
}
1
<Button Grid.Row="2" Content="TestParameter" Command="{Binding TestParameterCommand}" CommandParameter="{Binding Text, ElementName=textBox}" />

下面是用代码进行Command的调用【带参数】,若不带参数的直接传null即可。

1
2
3
4
private void Button_Click(object sender, RoutedEventArgs e)
{
(this.DataContext as TestViewModel).TestParameterCommand.Execute("testpara");
}

Prism在MVVM方面的介绍就如此啦,主要Prism不仅仅限于MVVM,后期再单独介绍Prism吧,毕竟那可不是个简单的活。


项目代码托管地址:https://wpfmvvm.codeplex.com/