一般的自动启动程序是通过添加到开机启动文件夹中就可以了,但是这次面临的一个问题就是,由于某种原因,我写的程序要在系统登录前就能先启动,先声明,我是给公司内部做的一个小工具,不是什么病毒之类的。

于是想到了服务,但是好像不能直接添加带图形界面的应用程序到服务中,便在网上找方法,找到一篇帖子,大概的步骤是:

1、下载Instsrv.exe和Srvany.exe。Instsrv.exe可以给系统安装和删除服务,Srvany.exe可以让程序以服务的方式运行。

2、将Instsrv.exe和Srvany.exe放置到某目录下,下面用%path%代替路径

3、打开CMD,输入以下内容,其中ServerName为你要创建的服务名称

%path%\instsrv ServerName %path%\srvany.exe

4、打开regedit注册表编辑器,找到以下目录

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<ServerName>

5、鼠标右键单击<ServerName>,创建一个"项",名称为"Parameters"

6、鼠标左键单击"Parameters",在右边点击鼠标右键,创建一个"字符串值"(REG_SZ),名称为"Application",数值数据里填写你要执行的程序完整路径。

7(可选)、鼠标左键单击"Parameters",在右边点击鼠标右键,创建一个"字符串值"(REG_SZ),名称为"DependOnService",数值数据里填写该服务依存的服务名称。不知道依存是什么的,你可以保持继续不知道,我不解释。

8、打开services.msc服务控制面板,找到<ServerName>,鼠标右键-属性-登陆,勾选"允许服务与桌面交互"(一般你要运行的程序都是有界面的吧)。

 

原帖地址

http://www.slyar.com/blog/win-instsrv-srvany-server.html

 

写下来,防止以后还要用到。

posted @ 2012-01-09 16:25 青石向晚 阅读(219) 评论(0) 编辑

  今天在看《大话设计模式》,想学学面向对象编程,毕竟现在经手的项目都是面向过程的方式在写,所以只能靠自己自学了。期间遇到了Override的问题,在关于重写基类方法上的时候,我有点不太理解。

  在网上搜到的资料,都说override会重写基类的方法,然后都用这样的例子

static void Main(string[] args)
{
  B b
=new B();
  b.F();
  A a
= b;
  a.F();
  Console.Read();
}
class A
{
  public virtual void F()
  {
    Console.WriteLine(
"A.F");
  }
}
class B : A
{
  publicoverridevoid F()
  {
    Console.WriteLine(
"B.F");
  }
}

  然后说执行出来的效果是 B.F,B.F,所以得到结论是override会重写基类的方法。

 

  但是当我把A a = b;改成A a = new A();后再执行,结果是B.F,A.F。说明不是只要override就能立刻改变基类方法的。想弄清一下原理,先记下来。

————————————————————————————————————————————————————————————————————————

  发现自己好久前写的帖子了,虽然这段时间都没怎么看面相对象这块的理论知识,但是今天再看的时候似乎懂了点东西。

  因为对象是引用类型,所以,A a = b;这句代码其实是创建一个A类型的对象a,但是指针指向的是B类型对象b的内存块,而B类型中,已经重写了所继承的F()方法,所以a.F()调用的是B类型中覆写了的基类的F()方法。

  然后查了下《C#本质论》,里面写着,“当“运行时”遇到一个virtual方法时,它会调用派生得最远的实现并重写virtual成员的实现”。这样就清楚override后是如此调用方法的了。

  不过对于编译器怎么判断的,以及新旧F()方法如何在内存中存放的,手头的资料太少了,网上直接搜多态找出的又都是些很浅显的东西,等以后明白了再来跟新吧。


posted @ 2011-07-09 20:42 青石向晚 阅读(179) 评论(2) 编辑

  今天遇到了点小问题,在写一个页面的时候,用ScriptManager.RegisterStartupScript注册了前台JavaScript脚本弹出对话框时,怎么也弹不出,单步调试的时候发现脚本根本就没注册上,找了半天原因,发现在我代码里有一句Server.Transfer()的方法,突然想到会不会是执行顺序的问题。果然在ScriptManager.RegisterStartupScript语句后加上return就可以了。也算得到了一点经验。

  顺便上网查了下aspx页面的执行顺序,有人说是:客户端输入网址—> 请求页面 —> IIS收到请求— > IIS开始处理该页面(执行cs的代码)—>处理完毕后发送到客户端 —>结束一次请求。这样看就是先执行后台再执行前台,就跟我上面得到的结论一样。看来基础知识还是很重要啊。

posted @ 2011-06-16 22:27 青石向晚 阅读(337) 评论(0) 编辑

  最近在学习jQuery,做了一个导航菜单练练手,主要是运用sildeup()和sildedown()函数来实现,但是遇到了一个小问题,就是在slidedown()中,为了防止出现鼠标过快的移动导致菜单动作和鼠标行为不一致的情况,我加入了stop()来取消未实现的动画,却发现stop()后会改变原有ul元素的height值,导致下一次鼠标hover时,ul只能下拉到上一次sildedown()到达的高度。

<head runat="server">
<script src='<%=Page.ResolveClientUrl("~/Scripts/jquery-1.5.1.js")%>' type="text/javascript"></script>
<title></title>
<style type="text/css">
*
{
margin:0;
padding:0;
}
#header
{
width:960px;
margin:0 auto;
padding-top: 15px;
position:relative;
}

.spacer
{
clear: both;
}

  .topnav
  {
   background: #3A57E9;
   display: block;
   float: left;
   font-weight: bold;
   height: 40px;
   margin: 0 auto;
   width: 960px;
  }
  .topnav li
  {
   list-style:none;
  position:relative;
    float: left;
   padding: 12px 5px;
   width:80px;
  }
  .topnav li a
  {
   text-decoration:none;
   color: #FFFFFF;
   font-size: 14px;
   padding: 0 5px;
  }
  .topnav li a:visited
  {
   text-decoration:none;
  }
  .topnav li .subnav
  {
   list-style-type:none;
   display:none;
   position:absolute;
   left:0;
   top:40px;
   float:left;
  }
  .topnav li ul.subnav li
  {
   float:left;
   background:#3A57E9;
   clear:both;
   width:80px;
   border-top:1px solid #FFFFFF;
  }
  .topnav li ul.subnav li a
  {
   font-size:14px;
   width:80px;
   float:left;
   padding:12px 10px;
  }
</style>

<script type="text/javascript">
$(document).ready(function () {
$(".topnav li").hover(function () {
$(this).find("ul.subnav").stop().slideDown(
'slow')
}, function () {
$(this).find("ul.subnav").stop().slideUp(
'fast')
})
});
</script>

</head>
<body>
<form id="form1" runat="server">
<div id="header">
<ul class="topnav">
<li> <a href="">测试1</a>
<ul class="subnav">
<li><a href="#">测试11</a></li>
<li><a href="#">测试12</a></li>
<li><a href="#">测试14</a></li>
<li><a href="#">测试15</a></li>
<li><a href="#">测试16</a></li>
<li><a href="#">测试17</a></li>
</ul>
</li>
</ul>
</div>
</form>
</body>

后来在CSDN上提问,有人说用stop(true,true),这样确实能解决高度变化的问题,但是这样动画是直接跳到完成后的状态,而非我要的立刻结束的状态,所以舍弃了。后来有人说使用removeAttr('style')来取消后来的样式,这样确实有效果。虽然我很疑惑为什么我下载的一些例子里光用stop就能解决的为什么我要额外加removeAttr('style'),但是实在找不出更好的解决方法,就这样使用了,如果也有遇到这方面问题的朋友,可以这样试试。

$(document).ready(function () {
$(
".topnav li").hover(function () {
$(
this).find('ul:first').removeAttr('style').stop().slideDown('slow')
},
function () {
$(
this).find('ul:first').stop().slideUp('fast')
})
});

posted @ 2011-06-16 10:17 青石向晚 阅读(175) 评论(0) 编辑