Posted by bianbian on 2010-04-16 00:42
if ($bianbianCount++ < 2) { ?>
}?>
本文Tags: C#, COM, CreateObject, PowerPoint, PPT, 进程
前阵子一直纳闷一件事,不是写了个早上10点自动生成天气会商ppt的程序嘛,不过时好时坏。具体的说:我去维护了一下后第二天是正常的,但是第三天就又不行了。看cron的日志(顺便推荐一下nnCron Lite),程序都正常启动了,但是ppt就是没有正常生成。
像我现在写的代码一般都不会有问题了,很少需要debug;看了几遍也没问题,所以很纳闷呀很纳闷。
后来没办法,开始在程序里输出log,才发现cron运行的时候(用户是SYSTEM),第二次运行:
using PPT = Microsoft.Office.Interop.PowerPoint;
_App = new PPT.Application();
这里会报COMException,真是奇怪了。
而调试的时候又是一切正常(用户是Administrator)。
最后总算捕捉到问题出现的情形:
cron运行,第一次正常产生ppt后,进程里仍驻留了PowerPNT.exe这个程序。
尽管程序是写了:
_App.Quit();
_App = null;
但是进程不会退出。不退出就算了,关键在SYSTEM用户下,第二次再跑程序的时候就会报前面提到的COMException,似乎一Quit(),这个PowerPNT.exe就挂在那里了。而在有用户界面的Administrator用户下,即使上一次进程没退出,也是可以正常工作的。
试了两种办法,可以使功能正常:
1)暴力一点,用完直接把进程kill掉:
Process ps = Process.GetProcessesByName(“POWERPNT.EXE”)[0];
ps.Kill();
2)最后不写 _App.Quit() ,让进程在内存里驻留。
最后还是选了2),毕竟服务器内存有10G,一个PPT进程也就20多M,而且PPT进程一个用户只有一个,相当于preload了,呵呵。。。
回家后找了一下文章,这个确实是Microsoft的问题。希望这篇文章对遇到这个问题的朋友有用。
如下是相关地址:
PPT2000: PowerPoint 2000 Remains in Memory After Getting a Presentation and Being Closed
powerpnt.exe remains running after OLE Quit()
GetObject and CreateObject behavior of Office automation servers
标签:
C#,
COM,
CreateObject,
PowerPoint,
PPT,
进程遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in C#, Meteorology | No Comments »
Posted by bianbian on 2010-03-18 00:45
if ($bianbianCount++ < 2) { ?>
}?>
本文Tags: 交流, 气象, 珠海
珠三角航空气象工作小组第二次会议在珠海召开,期待未来珠三角更多的合作。
PS. 珠海真是适合生活的好地方。
标签:
交流,
气象,
珠海遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in Meteorology | No Comments »
Posted by bianbian on 2010-02-21 17:03
if ($bianbianCount++ < 2) { ?>
}?>
本文Tags: PPT, 天气会商
每天的例行天气会商PPT,现在由程序自动采集数据、图片,通过PowerPoint的COM功能,来自动化生成了。
标签:
PPT,
天气会商遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in Meteorology | No Comments »
Posted by bianbian on 2010-02-08 22:21
if ($bianbianCount++ < 2) { ?>
}?>
本文Tags: HKO, 交流, 香港天文台
好久没有写blog,快过年了记个小结,2009这一年最大感受是向香港天文台好好学习。
http://www.hko.gov.hk/hkonews/A2/news-CAAC_uc.htm
标签:
HKO,
交流,
香港天文台遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in Meteorology | 1 Comment »
Posted by bianbian on 2009-09-30 20:36
if ($bianbianCount++ < 2) { ?>
}?>
本文Tags: RSL, 格式, 雷达
各种雷达不同的格式害死人啊害死人,这个库就是为统一读取各种格式而生的。
可以在这个基础上方便地加入其它格式的支持,我现在加入了深圳机场ADWR多普勒雷达的格式。
当然,它本身已经自带了很多格式:
HDF 1B-51 and 1C-51、Lassen (Darwin)、WSR-88d (Nexrad)、UF (Universal Format from NCAR)、SIGMET (Version 1)、SIGMET (Version 2)、McGill、TOGA、RAPIC (Berrimah)、RADTEC (SPANDAR)、EDGE …
The best feature of RSL is the ability to ingest many different RADAR data file formats with a single
library call. It can, also, read compressed files — compressed with GZIP or the older COMPRESS.
The routine is called RSL_anyformat_to_radar. You give it a filename and it will return a pointer to
a C structure called Radar. The structure Radar contains all the information found in the input file.
The structure is intended to represent a superset of all RADAR data formats.
RSL
标签:
RSL,
格式,
雷达遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in Meteorology, Not IT | 1 Comment »
Posted by bianbian on 2009-07-24 01:03
if ($bianbianCount++ < 2) { ?>
}?>
本文Tags: jQuery, TAB, 选项卡
jQuery挺好用,我就不说啥了。
今天实现了“自动TAB”,下面分享一下。有人会问为啥不用jquery-ui,主要是页面css已经全弄好了,实在不想为ui再写一次;其次是ui毕竟是那么大个家伙,心疼我的性能。
HTML页面非常简单:
- <div class="tabBox">
- <!--选项卡菜单-->
- <ul class="tabMenu">
- <li class="on"><a>选项卡1</a></li>
- <li><a>选项卡2</a></li>
- </ul>
- <!-- 选项卡内容-->
- <div class="hide">
- 选项卡1内容
- </div>
- <div class="hide">
- 选项卡2内容
- </div>
- </div>
之后就是用jQuery自动对这个.tabBox进行处理,加上鼠标点击自动切换的功能(当然可以加上鼠标移过的选项支持,作为示例,我就没写那么完善):
- $(function () {
- //===== TAB自动切换 tabBox =====
- // <div class="tabBox">
- // <ul class="tabMenu"><li class="on"><a>选项卡1</a></li></ul>
- // <div class="hide">内容1</div>
- // </div>
- // (1) li增加"index"记录偏移量(第i项),给a增加click方法
- $('.tabBox .tabMenu li').each(function(i, li) {
- li = $(li);
- li.attr('index', i)
- .children('a').attr('href', 'javascript:;').click(function() {
- //点击项的li的class设为on
- var li_on = $(this).parent(),
- index = li_on.attr('index');
- li_on.parent().children().removeClass('on');
- li_on.addClass('on');
- //显示对应的div内容。注意get(index)返回的是DOM节点,因此需要再$()转为jQuery对象
- $(
- li_on.parent().parent().children('div').addClass('hide').get(index)
- ).removeClass('hide');
- });
- //显示现有的li class=on对应的div内容
- if (li.hasClass('on')) {
- li.children('a').click();
- }
- });
- });
标签:
jQuery,
TAB,
选项卡遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in JavaScript, Technology | No Comments »
Posted by bianbian on 2009-05-02 17:19
if ($bianbianCount++ < 2) { ?>
}?>
本文Tags: 订婚
按老家习俗,似乎是要订婚的
可惜我和嘘嘘都不热衷,汗
辛苦小时候就和我最亲的阿姨了,汗
择日子,定佳期
两家长辈嘘来问去,就定到5.10了
当然是按农历4.16定的,不过阳历谐音也是还可以
“我要你”,虽然肉麻,也是蛮符合 订 的意思的嘛
高一走到现在,快十一年了
两个小屁孩要成家了,真是不容易呀
幸好我们两个都不贪心
尽管沿途有好多风景
只紧紧拽着彼此的手心
祝福我们吧
也祝大家幸福开心
标签:
订婚遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in bianbian & xuxu, Not IT | 7 Comments »
Posted by bianbian on 2009-05-01 02:50
if ($bianbianCount++ < 2) { ?>
}?>
本文Tags: T400, 蓝牙, 驱动
我的驱动都是手装的,只安装了必要的驱动(Think的那一大陀软件只安装了硬盘防震动的),发现XP下无法识别T400的蓝牙设备。
症状:Fn+F5没反应,bluetooth的指示灯不亮(机器左下角的硬件已经拨到启动无线、主板BIOS也已经Enable蓝牙)。
安装了蓝牙软件后一直提示“未找到buletooth设备”。
后来经过不断尝试,写出解决办法:
安装HOTKEY(鄙视Thinkpad啊。。。。非要多装个垃圾。。。。)。
找到HOTKEY的安装目录,手动运行TpFnF5.exe(其实就是按Fn+F5组合键后启动的程序,不知道为什么我全手动
装的驱动为什么不支持Fn+F5的监听)。
一运行,就提示找到新硬件,然后就可以安装Windows XP的蓝牙补充驱动和软件了,这时就可以看出蓝牙设备原来是个USB。
装完后,不能卸载HOTKEY,否则声音控制的那几个键不能用了,卸载程序太暴力。
只好在注册表里禁止开机运行。
记在这里,搜索过来确实有用的朋友请吱一声。
标签:
T400,
蓝牙,
驱动遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in Technology, Windows | 3 Comments »
Posted by bianbian on 2009-04-06 17:31
if ($bianbianCount++ < 2) { ?>
}?>
本文Tags: DOS, SATA, 分区
作为DOS下的分区工具,Paragon Partition Manager实在是太牛了!
上次装系统已经感慨过一次了:DOS下能直接对AHCI模式(高级主控接口)下的SATA硬盘进行操作,要知道这个模式Windows XP都没办法!
今天因为想格式化Temp分区(5G,用来放pagefile、asp.net的编译结果等;系统的Temp和IE的Temp我是放在内存盘里的,哇咔咔,内存一定要大),又进了一次这个软件。结果发现,它居然把插在USB上面的512G的移动硬盘也识别出来了。。。
太牛了,微软赶快把它收购吧。。。
标签:
DOS,
SATA,
分区遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in Technology, Windows | 1 Comment »
Posted by bianbian on 2009-03-17 02:48
if ($bianbianCount++ < 2) { ?>
}?>
本文Tags: Service, TC, Total Commander
Total Commander Service is a NT service, which supports:
1. Auto-launch TC when starting Windows
2. Hotkey: Win+Q to show/hide TC, or start TC when exit
Please put the TotalCMDService.exe (52K) in TC’s directory, and run to install/uninstall the NT service.
Tips, the best configuration:
Operation:
Check “Allow only 1 copy of Total Commander at a time”
Uncheck “Move icon to system tray when minimized”
Feel free to modify or distribute this code in any medium as long as these following two lines remain unchanged:
Total Commander Service, by bianbian.org@gmail.com
http://bianbian.org/technology/336.html
Download exe:TotalCmdService.zip (22K) , and src:TotalCmdServiceSrc.zip (10K, VC++6.0)
标签:
Service,
TC,
Total Commander遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in C/C++, Technology, Windows | 7 Comments »
Posted by bianbian on 2009-03-16 20:25
if ($bianbianCount++ < 2) { ?>
}?>
本文Tags: TC, Total Commander, 服务
经历多次安装卸载安装卸载,我这次终于静下心来琢磨了一下传说中的Total Commander。
总算有点上手了,确实方便,尤其现在内存大,根本不在乎耗多少资源。哈哈
不过郁闷的是这个玩意定义了那么多快捷键,却不支持呼出自己的快捷键。。。
好吧,我写个了windows NT 服务,来启动Total Commander。。。
同时注册了个全局热键(快捷键):Win+Q 来呼出Total Commander
Win+Q:T400的键盘这两个键,对我的手来说刚好是左手拇指和小指很舒服的位置。如果要改您下源码改吧
在注册表里扫了一遍,居然没有total commander的任何信息,果然绿色。
好吧,我承认,现在由于忙的关系,这个服务只做了个框。。。。过几天发布。。。。
补充:
好吧,发布了,嘿嘿:[原] Total Commander Service to show/hide TC by hotkey/boss key/shortcut key
1. 是系统服务(意味着没登录就启动TC了)
2. Win+Q隐藏或者呼出TC
下载到TC的目录里运行,安装/反安装(第一次运行安装,第二次卸载,。。。)。
由于是系统服务(默认用户是LocalSystem),如果直接启动TC也将以LocalSystem的身份运行,会带来很多问题(比如输入法就启动不了了)。
因此程序调用API(LogonUser)先进行了模拟登录,所以安装的时候需要输入用户密码。
Download exe:TotalCmdService.zip (22K) , and src:TotalCmdServiceSrc.zip (10K, VC++6.0)
标签:
TC,
Total Commander,
服务遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in C/C++, Technology, Windows | 11 Comments »
Posted by bianbian on 2009-03-13 17:09
if ($bianbianCount++ < 2) { ?>
}?>
本文Tags: AHCI, BIOS, SATA, T400
A. 首先开机按F1进入BIOS设置,进入configuration,然后在SATA里面将SATA模式设置compatibility(兼容模式),默认的是AHCI模式(高级主控接口),这一步很重要,否则安装XP时会蓝屏。其原因是因为XP系统安装盘一般不带SATA驱动。然后按F10,回车,退出BIOS设置。注意,在Ghost系统之前,也必须将此选项设置成compatibility,不然一般的DOS启动盘会发现不了硬盘的存在,导致Ghost失败,囧…
B. 开机按F12键选择从光驱启动
C. 系统安装(具体过程不再详解)
D. XP2的系统安装完毕。接下来的事情就是安装驱动程序了
E. 驱动安装(一共17个驱动)
1. 首先安装Intel主板驱动程序
2. 安装显卡驱动,注意,解压缩后,不要点击其子目录下的setup,而是分别安装driver和CCC两个子目录下的setup,然后再装一个.net fx 2.0
3. 安装显示器驱动,在桌面显示属性里面手工升级驱动
4. 安装无线网卡和网卡,看清楚自己的两个网卡型号了!无线网卡可直接setup,有线网卡必须用驱动更新方式手工安装
5. 检查一下设备管理器中的系统设备下是否有“M$用于High Definition Audio的UAA总线驱动”,这个是安装MODOM和声卡的前提,如果没有的话,得先去找个M$的HD总线补丁打上(Thinkpad T400主板驱动中好像有,所以一般不要另装)
6. 接下来声卡驱动、猫驱动、摄像头驱动安装
7. 安装蓝牙驱动
8. 接下来安装3个“基本系统设备”(4in1读卡器)
9. 再安装智能读卡器驱动(这个貌似有点问题…需要inf手工右键点安装)
10. 接下来安装指纹的驱动程序
11. 再安装AMT,这个比较恶心,对应着两个未知设备,一个叫“PCI简易通讯控制器”,一个叫“PCI串行口”,两个联想的AMT驱动都必须装
12. 接下来再装迅盘驱动,对应着设备管理器中的“PCI内存控制器”,必须手工升级驱动。虽然迅盘在XP下不起作用,但还是要安装的,不然每次重启都提示找到新硬件,甚烦!
13. 安装SATA驱动程序。这个是个难点。解开驱动压缩,首先运行其中prepare子目录中的install.bat,然后重启,记得进系统前一定要先将BIOS SATA configuration从compatibility改为AHCI;重启后,再在设备管理器中,展开IDE ATA/ATAPI控制器,发现其中有个”PCI Device”,然后手工升级这个驱动,SATA这才安装完毕。
14. 再安装TPM安全芯片驱动,这个在设备管理器中对应着某个“未知设备”,必须手工升级驱动,驱动在TPM子目录里面
15. 然后安装电源管理驱动和电源管理软件,至此,在设备管理器中扫描检测硬件改动,不会发现有任何未识别的设备。
F. 最后,可根据需要,把检测硬盘震动、Access Connections、Presentation Director、Hotkey Features等软件装上
from: http://www.cppblog.com/w2001/archive/2009/02/24/74741.html
AMT可以在BIOS里禁用,呵呵。
标签:
AHCI,
BIOS,
SATA,
T400遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in Technology | No Comments »
Posted by bianbian on 2009-03-02 21:26
if ($bianbianCount++ < 2) { ?>
}?>
本文Tags: C#, Marshal, struct, 泛型
背景简单提一下:好多个C/C++构成的结构体(struct)数据需要在C#中读取,他们可能在文件中或网络中(总之有办法转为流Stream)。
在C#中用Marshal的PtrToStructure()可以实现byte[]向struct的转变。
不过如果每个struct都要写个方法也太低效了,尤其是我现在遇到几十个struct的情况。。。。
研究了一下泛型(C#2.0就支持了),发现方法泛型可以解决这个问题。
Read the rest of this entry »
标签:
C#,
Marshal,
struct,
泛型遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in C#, Technology | 2 Comments »
Posted by bianbian on 2009-03-02 11:27
if ($bianbianCount++ < 2) { ?>
}?>
本文Tags: C#, delegate, Lambda, Micaps, 委派
C# 3.0新增了很多特性,其中委托(delegate)配合Lambda表达式使得程序简洁了很多。
我也就来尝尝鲜(其实也不算鲜了,C# 4.0都出来了。。。),说说我的应用实例:读取Micaps(一种气象上用的软件)数据文件。
Micaps有各类数据文件,比如第一类表示地面填图,格式是:
diamond 1 屏幕上需显示的内容
年 月 日 时次 总站点数
区站号 经度 纬度 ……(后面的你也不关心,就略掉了)
第二类表示高空填图,格式是:
diamond 2 屏幕上需显示的内容
年 月 日 时次 层次 总站点数
…… (参数与地面当然不一样)
如上,第一行是所有文件的通用信息,表示了该文件的类型、标题等,后面就是具体数据,每类文件格式不一。
于是,就要针对不同类型写不同的处理方法,但是,打开文件、关闭文件、检验第一行 这些又是一样的,导致代码重复。
这时候,委托就非常有意义:可以在父类里完成通用处理,而具体的数据处理通过委托交给子类具体负责。
Read the rest of this entry »
标签:
C#,
delegate,
Lambda,
Micaps,
委派遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in C#, Technology | 1 Comment »
Posted by bianbian on 2009-02-22 11:08
if ($bianbianCount++ < 2) { ?>
}?>
本文Tags: csdn, php
001 line 1
002 line 2
==>
line 1
line 2
不好意思,shell不太熟悉,只好用个php。。。欢迎补充其他语言的一行代码:
- php -r '$a=file("src.cpp"); for($i=0;$i<count($a);$i++)$a[$i]=substr($a[$i],4); echo join($a,"");' > src.cpp
标签:
csdn,
php遵守创作共用协议,转载请链接形式注明来自
http://bianbian.org 做人要厚道
相关日志
Posted in php, Technology | 1 Comment »