posts - 7, comments - 12, trackbacks - 0, articles - 2

2004年9月8日

http://blog.joycode.com/felix/

posted @ 2004-09-08 00:00 Felix Wang (Intl Vendor) 阅读(313) 评论(0) 编辑

2004年9月2日

许多.Net/ASP.Net的程序都用MSDE作为后台的数据库。MSDE engine的安装包里带了一套Merge Module,可以用在Setup Project中。这样我们在装自己的程序的时候附带的MSDE engine也能被装上了。

不过Setup Project build之后还是需要用Orca做一些细调,不然安装无法成功。详细步骤见link:


http://www.cnblogs.com/wang_ting_felix/articles/39035.aspx


(是原创的……由于是给老外写的,所以用英语了……懒得翻译……)

posted @ 2004-09-02 18:57 Felix Wang (Intl Vendor) 阅读(914) 评论(0) 编辑

2004年8月28日

在community看到有很多人都问过这个问题,既然.Net Framework 1.1有了本地化版的安装包(localized),那么为什么又有语言包(language packs)?

Microsoft .NET Framework Version 1.1 Redistributable Package
http://www.microsoft.com/downloads/details.aspx?FamilyId=262D25E3-F589-4842-8157-034D1E7CF3A3&displaylang=en

Microsoft .NET Framework Version 1.1 Language Pack
http://www.microsoft.com/downloads/details.aspx?FamilyId=04DBAF2E-61ED-43F4-8D2A-CCB2BAB7B8EB&displaylang=en

其实,关于本地化(汉化)版的安装包和英文版的安装包,他们唯一的区别就是安装时的界面被本地化了。换句话说,他们装出来的东西是没有任何区别。语言包则为Framework添加了本地化的资源,例如出错信息之类的。在安装了简体中文的语言包之后,如果我们将Thread.CurrentUICulture改成zh-CN并访问一个null reference,我们将能得到中文的Exception Message。我们可以为.Net Framework同时安装多个语言包……

注,以上信息都是对于.Net 1.1的。.Net 1.0的本地化版装出来都是不同的,所以对于中文版的.Net 1.0,我们一定要装中文版的.Net 1.0 Service Pack……

至于.Net 2.0,我到现在为止还只见过英文版和日文版的……等release了再看吧……

posted @ 2004-08-28 20:36 Felix Wang (Intl Vendor) 阅读(1420) 评论(1) 编辑

ASP.Net 1.x的client side postback script是这样的:
<!--
 
function __doPostBack(eventTarget, eventArgument) {
  
var theform;
  
if (window.navigator.appName.toLowerCase().indexOf("netscape"> -1) {
   theform 
= document.forms["Form1"];
  }
  
else {
   theform 
= document.Form1;
  }
  theform.__EVENTTARGET.value 
= eventTarget.split("$").join(":");
  theform.__EVENTARGUMENT.value 
= eventArgument;
  theform.submit();
 }
// -->


它是通过form.submit()去submit的。这样就有一个问题,form.onsubmit事件不会被触发,这么一来可能有些client side validation script就被绕过了。在ASP.Net 2.0里,这个问题被fix了。对于ASP.Net 1.x,据我所知,SP1也没有解决这个问题。我们可以使用下面的代码解决这个问题:

string myDoPostBack = @"
<script language=""javascript"">
<!--
 function __myDoPostBack(eventTarget, eventArgument) 
{
  var theform;
  
if (window.navigator.appName.toLowerCase().indexOf(""netscape""> -1{
   theform 
= document.forms[""Form1""];
  }

  
else {
   theform 
= document.Form1;
  }

  theform.__EVENTTARGET.value 
= eventTarget.split(""$"").join("":"");
  theform.__EVENTARGUMENT.value 
= eventArgument;
  
if ((typeof(theform.onsubmit) == ""function""&& theform.onsubmit()!=false{
   theform.submit();    
  }

  
 }

 __doPostBack 
= __myDoPostBack
// -->
</script>";
RegisterStartupScript("myDoPostBack", myDoPostBack);

posted @ 2004-08-28 11:45 Felix Wang (Intl Vendor) 阅读(977) 评论(3) 编辑

如果要render出滚动条,我们可以把DataGrid放在<div>里。如果还要一个不随滚动条滚动的Header,我们可以在<div>外另外render一个Header。我写过一个Web Control Library详见:

http://www.cnblogs.com/wang_ting_felix/articles/37185.aspx

posted @ 2004-08-28 08:24 Felix Wang (Intl Vendor) 阅读(1215) 评论(0) 编辑

这是一个关于Setup Project的问题。简单来说也就是RemovePreviousVersions,Install Custom Action以及Uninstall Custom Action同时用的时候会出点小乱子。有个美国的MVP写了篇KB报告BUG,如下

http://support.microsoft.com/?id=555184

我帮他看了一下,确实是有问题。而且问题在Whidbey beta 1里还是没有被fix。

VS.Net setup project的custom action,其实是通过一个unmanaged DLL去调用的。unmanaged DLL跑在msiexec.exe的进程里,通过API得到一个IManagedInstaller interface的指针,最后调用我们的managed Installer class。我们的assembly是通过Assembly.LoadFrom加载的。

现在的问题就是msiexec.exe的AppDomain在uninstall version 1的时候把一个旧版本的managed Installer class加载到AppDomain,然后没有释放这个AppDomain。当在install version 2时,应该Assembly.LoadFrom一个新版本的managed Installer class。由于旧版本的assembly仍然在AppDomain里,CLR就不去重新加载更新过的版本了。所以问题就出现了:version 1的install custom action被执行了,而不是version 2的……

对于这个问题,似乎没有什么好的workaround。只好保证两个版本的managed Installer class assembly不重名了……

posted @ 2004-08-28 01:35 Felix Wang (Intl Vendor) 阅读(879) 评论(0) 编辑

我的专长是.Net和Windows Installer,个人对ASP.Net, XML, Web Service以及managed debugging兴趣比较大。

由于工作的关系,对troubleshooting很有心得,精通deployment。

posted @ 2004-08-28 00:45 Felix Wang (Intl Vendor) 阅读(594) 评论(1) 编辑