风平浪静

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  8 随笔 :: 0 文章 :: 10 评论 :: 0 引用

2006年7月16日 #

  学习linux给了我很大的乐趣,每天除了完成正常的工作,一有时间就看关于linux方面的知识,今天在使用linux的过程中,一不小心用passwd命令把root的密码给弄丢了,当时非常的着急,好待最后总算解决了,为了记录此次解决问题的过程,特写下这篇post

使用的linux操作系统:RedHat 9.0

1、 在启动linux操作系统的时候,一般会看到grub引导提示,此时选择linux操作系统时。屏幕的下方将会出现一些很简单的提示信息,按照提示信息选择“e”,进入编辑模式。然后就会面对一个引导项目列表:其中显示出kernel /boot/vmlinuz-2.4.18-14 single ro root=LABEL=/ ,看到这段说明,我们在后面添加single(表示单用户运行),注意一定要空一格,否则系统重新启动会出现错误,然后就进入单用户模式下启动,按enter键,保存。

2、 此时又进入编辑模式屏幕,按‘b‘,即键入重启,grub就会引导单用户的linux模式,引导结束,你就会面对一个shell提示符号,此时你就可以改变根口令,命令为:passwd root ok,输入你的密码吧,再次进入,输入密码,哈哈哈,成功更改

3、 如果你的引导不是grub,而是lilo,当出现字符界面的时候,按tab键键入字符方式,此时输入linux single然后按enter键进入免密码的控制台,进入后用passwd命令修改root密码

posted @ 2006-07-16 22:41 风平浪静 阅读(894) 评论(0) 编辑

2006年7月12日 #

前几天,在编写程序时,遇到需要利用反射技术动态执行方法调用的需求,调用过程中传递引用类型参数后,值不能正常返回,具体参考下面网址:

http://tech-faraway.cnblogs.com/archive/2006/07/10/446818.html

google了很久,没有这方面资料。在这里感谢“南疯”,看了

http://name-lh.cnblogs.com/archive/2006/02/08/327146.html 

从而解决了我的问题,关于反射调用方法时传递应用类型参数的知识,南疯那篇文章写介绍很多了,现在把我在解决过程的想法写出来,我们首先从下面这段代码进行分析(下面的代码已经编译通过了):

namespace App
{
    
public class A
    
{
        
public void setValue( int num,ref DataTable _tb)
        
{
            num 
= 5;
            _tb.Columns.Add(
"temp1");            
        }

        
public void setValue1(out string s,out DataTable _tb)
        
{
            s 
= "temp2";
            _tb 
= new DataTable();
            _tb.Columns.Add(
"temp2");
        }

    }

    
class Test
    
{
        [STAThread]
        
static void Main(string[] args)
        
{
            
int    num = 0;
            
string s  = "Reflection";
            DataTable tb 
= new DataTable();

            Type _type 
= typeof(A);
            
object _o = Activator.CreateInstance(_type);
         
//            //section 1
            object[] param = new object[2];
            param[
0= s;
            param[
1= tb;

            Console.WriteLine(num);
            Console.WriteLine(s);
            Console.WriteLine(tb.Columns.Count
+"\n");

            ParameterModifier[] paramMods 
= new ParameterModifier[1];
            paramMods[
0=  new ParameterModifier(2);
            paramMods[
0][0= true;
            paramMods[
0][1= true;

            _type.InvokeMember(
"setValue",BindingFlags.Default|BindingFlags.InvokeMethod,
                
null,_o,param,paramMods,null,null);            
            
            
//section 2
            Console.WriteLine(num);
            Console.WriteLine(param[
0]); 
            Console.WriteLine(((DataTable)param[
1]).Columns.Count);            
            
            
//section3
            
//Console.WriteLine(tb.Columns.Count);
        }

    }

}

分析:

1、  从上面的代码,我们声明了一个类A,同时类里面声明了重载函数setValue,主要是演示反射具有自动匹配参数类型相同的函数。

2、  在主函数中,我们关注section1section2section3三部分:section1主要是当我们传不同的参数,验证反射将会调用其匹配的函数。如上面的代码Param[0]传的是s,反射就会自动匹配调用第二个函数,如果给param[0]传入num,那反射就自动调用A类中的第一个函数,这可能是。Net中的类型安全的作用吧,但如果是使用MethodInfoInvoke就不会自动匹配,不知道为什么?程序中section2下面的代码主要是验证使用反射技术调用需要传入引用类型的参数,引用类型参数值前后的变化;section3部分是一个容易忽视的地方,开始我也没注意,当我传入ref类型参数,param[1]tb中的引用对象是一样的,可如果传入out类型参数时,param[1]tb中引用的对象就不一样,不知道为什么会出现这种差别?所有如果需要取回out类型的参数的值时,就必须使用para[1]的值

3、  在使用反射技术要动态调用引用类型的参数时,在上面的参数param[1]必须初始化,不知道为什么?如果我们使用MethodInfoinvoke来调用传引用类型的参数时,如果含有重载函数时,尤其是传含有数据对象(DataTable或者DataSet),要找到匹配的函数特别繁琐。得到返回的值时,也必须使用传入参数数组中的对象,而不能使用函数中的变量。

以上就是我的一些心得,现在返过来想想,早期不能得到引用类型参数的返回值,主要就是忽视section3部分。


posted @ 2006-07-12 11:19 风平浪静 阅读(471) 评论(0) 编辑

2006年7月10日 #

今天在程序开发中想利用反射技术动态执行类的方法,开始一些方法的动态执行都没什么问题。可程序中有些重载方法需要传入ref或者out参数类型,此时发现反射方法能正确执行,可执行的结果确不能在refout的参数中体现,参数的值还是方法动态执行前的内容,根本就没有改变,不知道什么原因?很是郁闷,不知道问题出在那里?

  下面是我的动态执行的核心部分,希望大家给出解决方法:

_methodInfo = _type.GetMethod(方法名称);

_methodInfo.Invoke(_obj,new object[]{data,str});

上面代码:_obj_type的实例对象,DataStr组成的数组,是方法执行需要的参数,Data调用前传入的是null,其中dataout型参数。按理说,执行后,会返回结果,可最后还是null。我google了,说GetMethod时需要使用ParameterModifier这个参数,可还是没有反应,不知道是不是我使用的方法不当,希望高手出来指点一下?

posted @ 2006-07-10 01:12 风平浪静 阅读(612) 评论(3) 编辑

 .net下面用C#开发MIS应用程序,数据库一般使用的是微软的sql server,同属微软家族的产品在开发过程中一般一帆风顺。但近来,项目组要求应用程序的数据库转向oracle数据库,在试验过程中遇到了一些莫名其妙的麻烦,虽然问题已经解决,但我还不知道是什么原因?下面是我试验过程的基本介绍:

  1、环境

     数据库:oracle 8.17  安装的是企业版 

开发工具:vs 2003 

     操作系统:win 2003

  项目采用的是c/s结构

  试验是在同一机器上进行的

 2、问题起因及结果

   1)程序编写之前oracle数据库运行正常,通过客户端访问工具正常访问,服务也正常。程序代码采用的是.ne提供专门针对oracle数据库的开发组件:using System.Data.OracleClient

   2)程序调试运行,运行到oracleConnectionOpen()方法的时候,就会弹出“Could not create an environment: OCIEnvCreate returned -1.” 仔细检查我的程序和用户名、密码以及服务名,都没什么问题,但不管怎么样就是弹出那个异常信息。最后google一下,发现了这个问题出现的大致原因是说我的权限不够,需要对oracle安装的主目录重新设置一下运行权限,可那个信息据说都是针对asp.net 的程序,天知道对于c/s程序怎么出现这个问题。

   3)没办法,即然出现这个问题就要想办法解决,因为我的oracle主目录是安装在fat32文件类型目录下面,而不是他们所说的ntfs,所以网上提供的解决方法根本就不能进行下去,请教其它的人,都说c/s程序没有出现这个问题,也没解决。faint,难道我的rp有问题。

   4)现在事情即然到了这一步,只要出杀手锏,把oracle的安装环境重新配置。备份oracle数据库,卸载oracle,重新在我的系统目录(NTFS)上面在装一个oracle,安装完毕,启动监听程序和服务,运行程序,靠,居然运行成功。难道真的与文件类型有关系?

3、后记

 以上就是C#连接oracle数据库经历,虽然可以访问oracle数据库了,但原因就是没搞清,为什么会出现这个问题?难道真的因为我的逻辑盘是FAT32原因?可觉得没道理阿……那位大虾如果知道原因,希望赐教,希望大家可以讨论讨论……

posted @ 2006-07-10 00:48 风平浪静 阅读(3372) 评论(2) 编辑

2006年6月27日 #

 

今天在项目中要开发一个window服务,这个服务的作用就是隔一段时间监视指定的应用程序是否正常运行,如果指定的应用程序的运行一旦停止。那么windows服务就重启这个指定的进程,保证指定的应用程序正常运行,开发完服务,安装然后附加进程测试。

   但问题出现了:

在这个服务里面声明并重启的进程是在运行,可是应用程序的界面确不能出现,不知道为什么会出现这个原因?困扰了我好几天,查了google,也得不到答案,希望园子里面的朋友能给出一些看法,谢谢!

PS:下面是类似上面情况的一段代码

Process notePad = new Process();
notePad.StartInfo.FileName = @"c:\winnt\notepad.exe";
notePad.Start();
MessageBox.Show("
為了愛護您的眼睛﹐請您暫時休息5分鐘并向遠處眺望1111","警告",MessageBoxButtons.OK,
MessageBoxIcon.Warning,MessageBoxDefaultButton.Button1,MessageBoxOptions.DefaultDesktopOnly);
能執行MessageBox(即彈出對話框)﹐但前面的記事本卻始終打不開﹐沒反應﹐而通过taskMgr确能看到Notepad已经运行。
posted @ 2006-06-27 00:32 风平浪静 阅读(466) 评论(2) 编辑

2006年4月24日 #

  今天装了一个.Net 2.0,运行ASP.Net2.0程序。启动浏览器后,在浏览器中出现下面的提示信息:
  
服务器应用程序不可用
您试图在此 Web 服务器上访问的 Web 应用程序当前不可用。请点击 Web 浏览器中的刷新按钮重试您的请求。

1、   于是下面就开始了我的问题解决之旅,首先介绍一下我的平台:win2003操作系统,含有.Net 1.1 .Net 2.0.

2、   按着网上提供的方法,我几乎各种方式都试了:重装.Net iis ,呵呵,就差没重装系统了,累了我一天。现提供我参考的几个帖子,对我帮助很大,也希望对大家有帮助:

http://hjh1982.cnblogs.com/archive/2006/03/24/357553.html

http://www.cnblogs.com/cowbird/archive/2005/02/16/104546.html

http://tech.cixiong.com/t/200603/08/0962997.html

http://tech.eyeah.cn/3117/1114/1119/336938957.html

3、   下面总结一下我解决这个问题的大体过程吧:

。改下一虚拟目录的应用程序池.ASP.NET 1.1 ASP.NET 2.0的虚拟目录使用不同的应用程序池.

修改方法是:在iis管理器中的应用程序池新添一个应用程序池(app2),然后再默认网站下面选择你的虚拟目录,为这个虚拟目录选择新的应用程序池,方法是选择虚拟目录下面的属性,然后再“目录页下修改。为什么要添加一个应用程序池,上面给出的网页已经有解释了。

。保证执行新添加的应用程序池用户,一般为Net Servcie .保证它对systemroot:\Windows\Microsoft.NET\Frameworks\2.0.xxxx这个目录由足够的权限。

。保证指定的用户对上面的目录有访问权限后,还需要指定用户对虚拟目录的访问权限,方法是iis管理器下面选择你要运行的虚拟目录,然后点击右键,选择权限。添加Net services这个用户,并指定足够的权限。当然在IIS的虚拟目录的属性设置中会多出一个ASP.NET标签,在那里边把运行时调整为2.0,默认使用的是1.1的运行时,这个也需要注意。

 

    以上就是在我的系统上对这个问题的解决方法,希望对遇到类似问题的兄弟一点启示。

posted @ 2006-04-24 16:19 风平浪静 阅读(541) 评论(1) 编辑

2006年4月22日 #

摘要: 在sql server下备份还原数据库,相信大家都用sql server企业管理器下面自带的工具,但在制作安装软件的时候。如果仍然用企业管理器下面备份整个数据库,然后还原数据库,这样就显得有点笨重,这样备份数据库主要占的空间太大,如果数据库大一点的话,对一种小小的安装光盘就不合适了,可选的方法,是把数据库对象和数据库中的数据备份成.sql文件,然后通过查询分析器或者命令行执行命令安装,可以节约很大...阅读全文
posted @ 2006-04-22 16:55 风平浪静 阅读(1730) 评论(2) 编辑

2006年4月18日 #

摘要: 大家好,本人认识博客园已经有一段时间了,但主要是在园子上看别人写的一些技术心得和开源代码,自己很少发表文章和看法,主要原因是一来觉得自己文笔烂,二来觉得水平还尚待提高。不过接触的时间多了,觉得这里讨论技术的氛围很好,有必要参与大家的讨论提高自己的水平,就为自己申请了一个blog,希望能和大家多多交流,共同进步…………最后,祝博客园越办越好…...阅读全文
posted @ 2006-04-18 18:25 风平浪静 阅读(28) 评论(0) 编辑