2008年11月28日
1、创建安装项目“Setup1”安装项目
在“文件”菜单上指向“添加项目”,然后选择“新建项目”。
在“添加新项目”对话框中,选择“项目类型”窗格中的“安装和部署项目”,然后选择“模板”窗格中的“安装项目”。在“名称”框中键入 “setup1”。
单击“确定”关闭对话框。
项目被添加到解决方案资源管理器中,并且文件系统编辑器打开。
在“属性”窗口中,选择 ProductName 属性,并键入”遥测水位数据接收软件”。
选择setup1右键添加项目输出将你的应用程序以及相应的类库,数据库文件添加到安装程序中, 打开文件系统界面, 找到应用程序文件夹, 右键点击你的应用程序,创建两个快捷方式,
右键属性指定对应的图标, 分别拖到用户的"程序"菜单和用户桌面上. 完成初步安装.
2. 添加卸载程序
在打包项目中添加文件msiexec.exe(一般在c:\windows\system32(系统目录中)找到)。
在文件系统视图中选择应用程序文件,在msiexec.exe上单击右键选择“创建快捷方式”,重命名快捷方式为“uninst”.
更改此快捷方式Argmuments为“/x {产品ID}”,产品ID的值为打包项目的ProductCode属性值。
3. 打包MSDE SP3
选择“文件系统编辑器”,在“视图“菜单上指向“添加”,然后选择“合并模块…”(Merge Moudle),在添加模块中,找到MSDE sp3安装文件所在目录,将MSM,MSM\1033,MSM\2052下的所有文件,添加进来。
在安装项目Setup1的属性(Properties)中的“Search Path”,添加MSM,MSM\1033,MSM\2052目录。
单击“生成菜单下的“生成解决方案”,编译Setup1安装项目工程。
4. 自动附加数据库
解决方案中新添加项目,项目类型为windows类库, 然后添加新建项->安装程序类, 打开Installer1.cs切换到代码编辑视图, 添加以下代码

Code
1
private void CreateDataBase()
2
{
3
// 启动SQL服务, 预防装完之后服务未启动
4
Process p = new Process();
5
p.StartInfo.FileName = "cmd.exe";
6
7
p.StartInfo.UseShellExecute = false;
8
p.StartInfo.RedirectStandardInput = true;
9
p.StartInfo.RedirectStandardOutput = true;
10
p.StartInfo.RedirectStandardError = true;
11
p.StartInfo.CreateNoWindow = true;
12
13
p.Start();
14
p.StandardInput.WriteLine("net start MSSQL$HW1000");
15
p.StandardInput.WriteLine("exit");
16
p.StandardOutput.ReadToEnd();
17
18
string strSql = string.Format("server={0}; user id={1}; password={2}; Database=master", "(local)\\hw1000", "sa", "sa");
19
string strMdf = this.Context.Parameters["targetdir"] + "database\\ShanDongShuiQing.mdf";
20
string strLdf = this.Context.Parameters["targetdir"] + "database\\ShanDongShuiQing_log.ldf";
21
//LogWriter.LogEvent("MDF路径:" + strMdf);
22
string str;
23
SqlConnection myConn = new SqlConnection(strSql);
24
str = "EXEC sp_attach_db @dbname = N'ShanDongShuiQing', @filename1 = N'" + strMdf + "',@filename2=N'" + strLdf + "'";
25
SqlCommand myCommand = new SqlCommand(str, myConn);
26
myConn.Open();
27
myCommand.ExecuteNonQuery();
28
myConn.Close();
29
}
30
31
protected override void OnAfterInstall(System.Collections.IDictionary savedState)
32
{
33
base.OnAfterInstall(savedState);
34
try
35
{
36
CreateDataBase();
37
}
38
catch (Exception ex)
39
{
40
throw new Exception(ex.ToString());
41
}
42
}
编译InstallDB项目.
5. 建自定义操作
在解决方案资源管理器中选择安装项目“Setup1”项目,在“视图”菜单上指向“编辑器”,然后选择“自定义操作”。
在“自定义操作编辑器”中选择“安装”节点。单击右键“添加自定义操作”,在选择项目中的项中选择“应用程序文件夹”,选择“主输出来自InstallDB(活动)”。
在“属性窗口”中选择“CustomActionData”属性并键入“/targetdir="[TARGETDIR]\"”。
附:/targetdir="[TARGETDIR]\"是安装后的目标路径,为了在InstallDB类中获得安装后的路径,我们设置此参数。
生成安装程序
6. 修改安装程序
用Orca MSI安装文件修改器打开生成的安装包(Setup1.msi)文件,在左列的表栏中
选择“InstallExecuteSequence”表,修改下面的属性值:
GetSqlStates.XXXXXX 103改成421
RemoveExistingProducts值改成1800
InstallInitialize值改成1799
在InstallUISequence
选择“InstallUISequence”表,修改下面的值:
GetSqlStates.XXXXXX 103改成421
选择“Property”表,添加以下三个属性:
SqlInstanceName:MSDEDH实例服务名
SqlSecurityMode:SQL(不加这行确实也行,就是没办法用SQL模式登录)
SqlSaPwd:sa的密码
到此全部完成, 安装软件后测试通过, 卸载通过.
2008年10月17日
默认的Fckeditor具有从ms word粘贴的功能, 但是当你的word文档中包含图片的时候, 就会出现无法显示图片的错误,
在这里我们要实现直接导入word文档,如果其中包含图片,则自动分离图片并上传到服务器后在fckeditor中显示.
1. 为fckeditor添加自定义按钮
需要修改的文件:
1. fckconfig.js
2. zh-cn.js
3. fckeditorcode_ie.js(gecko的差不多)
fckconfig.js: 添加导入word文档按钮
找到这行中 FCKConfig.ToolbarSets["Default"] = [...
'Paste','PasteText','PasteWord',在PasteWord后插入'ImportWord'.
zh-cn.js
设置上述按钮的中文说明
PasteWord : "从 MS Word 粘贴",
ImportWord : "导入Word文档",
fckeditorcode_ie.js 在按钮中显示按钮
找到
case 'PasteWord':B=new FCKToolbarButton('PasteWord',FCKLang.PasteWord,null,null,false,true,11);break;
这行,在其后加入
case 'ImportWord':B=new FCKToolbarButton('ImportWord',FCKLang.ImportWord,null,null,false,true,11);break; 为按钮加入功能
找到
case 'PasteWord':B=new FCKPasteWordCommand();break;
这行,在其后加入
case 'ImportWord':B=new FCKDialogCommand('ImportWord',FCKLang.ImportWord,'/ImportWord/ImportWord.aspx',700,600);break;
这样就设置好了自定义按钮, 当用户点击这个按钮之后, 会自动弹出页面打开ImportWord.aspx这个文件.
剩余的就是.net的工作了, ImportWord是我从网上下载的, 基本没有修改
这行我修改为wdFormatFilteredHTML.
docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod,
null, doc, new object[] { saveFileName, WdSaveFormat.wdFormatFilteredHTML });
大功告成, 如果打开页面后上传word文档会遇到权限错误
请在web.config中的<system.web>中加入<identity impersonate="true" userName="Administrator" password="xxx" />这句即可解决.
但是这样明显很不爽的是涉及到安全问题, 我试过其他的办法(http://blog.csdn.net/zhao8155363/archive/2007/10/29/1854309.aspx),
皆没成功, 希望有知道别的办法的朋友告诉我.
本文参考:http://www.cnblogs.com/life-ego/articles/1228370.html
Fckeditor在.net下文件上传提示提示没有权限的解决办法
首先下载FCKeditor.Net_2.6.3的source包并打开FCKeditor.Net_2.6.3,
找到文件FileWorkerBase.cs
第118行 Response javascript代码的那行, 改为
Response.Write( @"(function(){var d=document.domain;while (true){try{var A=window.top.opener.document.domain;break;}catch(e) {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;}})();" );
重新编译解决方案, 实用新的FredCK.FCKeditorV2.dll可以解决问题.
http://files.cnblogs.com/andyran/ImportWord.rar
2008年4月30日
摘要: 系统 WINXP+IIS+PHP5+MYSQL51. 安装首先安装PEAR, 进入DOS命令行,进入PHP目录,运行go-pear,一切默认吧,安装完成.然后安装PEAR PACKAGEpear install dbpear install mdb2pear install mdb2 (之后会有提示,安装MySQL模块)pear install db_dataobject安装完成后,安装包如下C:...
阅读全文
2007年12月5日
2007年9月6日
像 Visual Studio 2005 编译出来的 bin, obj 目录和 *.suo 文件都没有必要添加到 Repository 中。每次试编译后 bin, obj 目录都会改变。而 *.suo 文件(它和 *.sln 文件同目录,但是为隐藏属性)甚至在每次用 VS (Visual Studio) 打开时都会被更新一次。要取消对它们的版本化,必须在第一次提交时就不要提交它们,但是提交所有其它应该被版本化的文件。然后,在文件管理器里右键点击你要排除的目录或文件,比如 bin,点击 TortoiseSVN->Add to ignore list->bin 就行了。
还有一种方法就是在提交完应该版本化的文件后,用资源管理器浏览到 bin,右键点击属性。在弹出来的对话框里点击 Subversion->Properties...->Add。Property name 选 svn:ignore,值里写 bin 就行了。如果在同一个目录下你要排除多个文件或目录,用回车来分隔各个文件名和目录名。
如果你已经把你不需要的文件或目录添加到 Repository 里了,那么下面的方法会解决这个问题。
比如要剔除 *.suo 文件,把 *.suo 文件移动到另一个安全的目录里,比如桌面,然后提交更改。再把它移回来,然后将 *.suo 添加到 ignore list 就行了。对于目录,可以这么做:
1. →
2007年8月31日
如何快速建立Subversion服务器,并且在项目中使用起来,这是大家最关心的问题,与CVS相比,Subversion有更多的选择,也更加的容易,几个命令就可以建立一套服务器环境,可以使用起来,这里配套有动画教程。
本文是使用Subversion最快速的教程,在最短的时间里帮助您建立起一套可用的服务器环境,只需略加调整就可以应用到实际项目当中。
本教程分为以下几个部门,不仅仅是快速入门,最后我们还有一些高级功能的说明,为了说明简单,教程是在windows下使用的方式,以方便资源有限的项目使用,对于UNIX环境下,区别并不大。
软件下载
服务器和客户端安装
建立版本库(Repository)
配置用户和权限
运行独立服务器
初始化导入
基本客户端操作
1,软件下载
下载Subversion服务器程序。
到官方网站的下载二进制安装文件,来到二进制包下载部分,找到 Windows NT, 2000, XP and 2003部分,然后选择" this directory ",这样我们可以看到许多下载的内容,目前可以下载 svn-1.4.0-setup.exe 。
下载Subversion的Windows客户端TortoiseSVN。
TortoiseSVN是扩展Windows Shell的一套工具,可以看作Windows资源管理器的插件,安装之后Windows就可以识别Subversion的工作目录。
官方网站是TortoiseSVN ,下载方式和前面的svn服务器类似,在Download页面的我们可以选择下载的版本,目前的最高稳定版本的安装文件为TortoiseSVN-1.4.0.7501-win32-svn-1.4.0.msi。
2,服务器和客户端安装
服务器安装,直接运行svn-1.4.0-setup.exe ,根据提示安装即可,这样我们就有了一套服务器可以运行的环境。
安装TortoiseSVN,同样直接运行TortoiseSVN-1.4.0.7501-win32-svn-1.4.0.msi按照提示安装即可,不过最后完成后会提示是否重启,其实重启只是使svn工作拷贝在windows中的特殊样式生效,与所有的实际功能无关,这里为了立刻看到好的效果,还是重新启动机器。
3,建立版本库(Repository)
运行Subversion服务器需要首先要建立一个版本库(Repository),可以看作服务器上存放数据的数据库,在安装了Subversion服务器之后,可以直接运行,如:
svnadmin create E:\svndemo\repository
就会在目录E:\svndemo\repository下创建一个版本库。
我们也可以使用TortoiseSVN图形化的完成这一步:
在目录E:\svndemo\repository下"右键->TortoiseSVN->Create Repository here...“, 然后可以选择版本库模式, 这里使用默认即可, 然后就创建了一系列目录和文件。
4,配置用户和权限
来到E:\svndemo\repository\conf目录,修改svnserve.conf:
# [general]
# password-db = passwd
改为:
[general]
password-db = passwd 然后修改同目录的passwd文件,去掉下面三行的注释:
# [users]
# harry = harryssecret
# sally = sallyssecret
最后变成:
[users]
harry = harryssecret
sally = sallyssecret
5,运行独立服务器
在任意目录下运行:
svnserve -d -r E:\svndemo\repository 我们的服务器程序就已经启动了。注意不要关闭命令行窗口,关闭窗口也会把svnserve停止。
6,初始化导入
来到我们想要导入的项目根目录,在这个例子里是E:\svndemo\initproject,目录下有一个readme.txt文件:
右键->TortoiseSVN->Import...
URL of repository输入“svn://localhost/”
ok
完成之后目录没有任何变化,如果没有报错,数据就已经全部导入到了我们刚才定义的版本库中。
需要注意的是,这一步操作可以完全在另一台安装了TortoiseSVN的主机上进行。例如运行svnserve的主机的IP是133.96.121.22,则URL部分输入的内容就是“svn://133.96.121.22/”。
7,基本客户端操作
取出版本库到一个工作拷贝:
来到任意空目录下,在本例中是E:\svndemo\wc1,运行右键->Checkout,在URL of repository中输入svn://localhost/,这样我们就得到了一份工作拷贝。
在工作拷贝中作出修改并提交:
打开readme.txt,作出修改,然后右键->Commit...,这样我们就把修改提交到了版本库,我们可以运行。
察看所作的修改:
readme.txt上右键->TortoiseSVN->Show Log,这样我们就可以看到我们对这个文件所有的提交。在版本1上右键->Compare with working copy,我们可以比较工作拷贝的文件和版本1的区别。
最后,所有的内容都已经录制为动画文件,大家可以参考。
关于本教程大家有什么意见,可以在论坛里讨论 。
转载地址:http://www.subversion.org.cn/index.php?option=com_content&task=view&id=56&Itemid=9
PS
Subversion安装成service
sc create SVNService binPath= "\"C:\Program Files\Subversion\bin\svnserve.exe\" --service -r E:\svndemo" DisplayName= "SVNService" depend= Tcpip start= auto
2007年8月12日
最近在测试smarty的时候,刚开始没有问题,后来发现display出来的页面总是会出现CSS的错乱问题,后来直接把TPL输出为HTML没有任何问题,但是一旦使用SMARTY输出就会出现问题,查HTML SOURCE并没有发现什么异常的问题,最后无奈用ue把输出的HTML SOURCE和TPL进行对发现经过SMARTY输出的页面头前面多了四个空格,就是这该死的四个空格导致了问题,在网上查了差资料,发现是UTF8的BOM问题引起的,由于PHP不支持BOM,它不会忽略UTF-8编码的文件开头BOM的那三个字符,找到问题所在后解决问题很简单,打开UE把文件保存为UTF不带BOM即可,这个简单的问题困扰了我三天,郁闷,做个记录
2007年6月15日
原文:http://www.adobe.com/devnet/flex/quickstart/adding_drag_and_drop/,本文翻译只是备忘,有错误的地方多多谅解。
对于一些控件如DataGrid,HorizontalList,List,Menu,PrintDataGrid,TileList,Tree等,我们可以通过设置控件属性dragEnabled,dropEnabled,dragMoveEnabled来很方便的实现拖放效果,但是当我们面临一些不是基于列表控件(non-list-based)的组件
或者容器时,我们该如何使之支持拖放事件呢? FLEX为我们提供了一些类和事件来让我们可以手工写出支持拖放事件的代码,我们可以通过DragManager,DragSource和DragEvent来实现拖放操作.
拖曳初始化事件(Drag initiator events)
当我们想把一个控件当作一个拖曳控件(Drag initiator)来使用,我们可以通过mouseDown,mouseMove,dragComplete事件来控制拖放操作.
鼠标锁定事件和鼠标移动事件(mouseDown events and mouseMove events)
鼠标锁定事件在当你选择住某个控件并且一直按住鼠标按钮时被触发.
鼠标移动事件在当你鼠标移动时触发.
以下的例子里使用图片控件(Image control)内嵌了4张图片(1分,2分,5分和10分硬币的图片).对于每一个图片控件,我们都定义了mouseMove事件,并且定义了一个事件处理方法dragIt()来处理这个事件. 在dragIt()方法里,我们获得一个指向当前硬币图片事件的引用,该引用指到该事件对象的currentTarget属性.我们把它保存为本地对象并命名为dragInitiator.
接下来我们创建一个DragSource的实例,在其中创建一个addData()方法获取由dragIt()方法传过来的value参数,这个参数用于以后处理Drop事件时使用.
当我们拖动目标时,我们想让这个硬币图片跟随鼠标移动,我们可以通过创建一个图片实例(Image instance),把这个实例的source属性指到当前拖动的图片目标上去,我们把新创建这个图片实例保存为本地变量dragProxy
最后我们通过使用DragManager类中的静态方法doDrag(),然后指定相关的drag initiator, drag source, event object, 就可以开始拖曳操作了.
在这个例子里,你可以拖动图片对象到任何地方,但是无法放置, 因为我们并没有指定任何被放置的对象.
1
<?xml version="1.0" encoding="utf-8"?>
2
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
3
width="500" height="160">
4
5
<mx:Script>
6
<![CDATA[
7
import mx.controls.Image;
8
import mx.managers.DragManager;
9
import mx.core.DragSource;
10
11
[Embed('assets/1c.png')]
12
[Bindable]
13
public var OneCent:Class;
14
15
[Embed('assets/2c.png')]
16
[Bindable]
17
public var TwoCents:Class;
18
19
[Embed('assets/5c.png')]
20
[Bindable]
21
public var FiveCents:Class;
22
23
[Embed('assets/10c.png')]
24
[Bindable]
25
public var TenCents:Class;
26
27
private function dragIt(event:MouseEvent, value:uint):void {
28
var dragInitiator:Image = event.target as Image;
29
30
var dragSource:DragSource = new DragSource();
31
dragSource.addData(value,'value');
32
33
var dragProxy:Image = new Image();
34
dragProxy.source = event.currentTarget.source;
35
36
DragManager.doDrag(dragInitiator, dragSource, event, dragProxy);
37
}
38
]]>
39
</mx:Script>
40
41
<mx:HBox>
42
43
<mx:Image
44
id="oneCent" source="{OneCent}"
45
mouseMove="dragIt(event, 1);"
46
47
/>
48
<mx:Image
49
id="twoCents" source="{TwoCents}"
50
mouseMove="dragIt(event, 2);"
51
52
/>
53
<mx:Image
54
id="fiveCents" source="{FiveCents}"
55
mouseMove="dragIt(event, 5);"
56
57
/>
58
<mx:Image
59
id="tenCents" source="{TenCents}"
60
mouseMove="dragIt(event, 10);"
61
62
/>
63
</mx:HBox>
64
65
</mx:Application>
66
想实践的话随便搞4张差不多的图片放到flex项目的assets下,对应好命名,就可使用.
2007年6月11日
2007年6月5日
只是简单的备忘作用,最近记性很差.
Flex2中的代码片段,用于实现拍照功能.
1
private function getSnapshotJPEG():void
{
2
var jpegEnc:JPEGEncoder = new JPEGEncoder(100);
3
var jpegData:ByteArray = jpegEnc.encode(cameraStream.getSnapshotBitmapData());
4
5
//var req:URLRequest = new URLRequest('http://127.0.0.1/php/UploadImg.php');
6
var req:URLRequest = new URLRequest('http://127.0.0.1/dotnet/FlexWebCam.aspx');
7
var loader:URLLoader = new URLLoader();
8
saveImageListeners(loader);
9
//loader.addEventListener('complete', onComplete);
10
11
req.contentType = 'applicatoin/octet-stream';
12
//req.contentType = 'multipart/form-data';
13
req.method = URLRequestMethod.POST;
14
req.data = jpegData;
15
16
try
{
17
loader.load(req);
18
}
19
catch (error:Error)
{
20
trace('unable to load request');
21
}
22
23
function saveImageListeners(dispatcher:IEventDispatcher):void
{
24
dispatcher.addEventListener(Event.COMPLETE, onComplete);
25
}
26
27
function onComplete(e:Event):void
{
28
//navigateToURL(new URLRequest("http://127.0.0.1/php/UploadImg.php"),"_self");
29
var loader:URLLoader = URLLoader(e.target);
30
trace('返回数据:'+loader.data);
31
}
32
}
FLEX实现抓取图像,通过JPEGEncoder转换成ByteArray,返回.
剩下的工作简单了,获取图像保存而已
php 实现
1
$fp = fopen('php.jpg', 'wb');
2
fwrite($fp, $GLOBALS['HTTP_RAW_POST_DATA']);
3
fclose($fp);
C# 实现
1
System.Drawing.Image img = System.Drawing.Image.FromStream(Request.InputStream);
2
img.Save(@"D:\path\asp.jpg");