使用 JScript 创建 .exe 或 .dll 文件的方法


Posted in Javascript onJuly 13, 2011

什么是 JScript?
JScript 是由微软开发的活动脚本语言,基于 ECMAScript 规范实现。Internet Explorer 中的 JavaScript,实际上是指 JScript。JScript 已被 Windows Script Host(WSH)支持(WSH 中的 JavaScript shell scripting:C:\> cscript jslint.js)。JScript 最新的版本(JScript.NET)基于 ECMAScript 4.0 ,并且可以在 .Net 环境下编译。
.NET Framwork 中包含有 JScript 编译器 :JScriptCompiler (C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\jsc.exe),其可以将 JScript 文件编译为一个 .exe 或者 .dll 文件。
为了方便使用,我们可以将 JScriptCompiler 的路径加入到环境变量(环境变量 ?> 系统变量 ?> Path)中。在 CMD 程序运行窗口中直接调用命令 “jsc”,就可以看到编译器相关的帮助选项。

jsc [选项] <源文件> [[选项] <源文件>…] JScript 编译器选项 
? 输出文件 - 
/out:<file> 指定二进制输出文件的名称 
/t[arget]:exe 创建控制台应用程序(默认) 
/t[arget]:winexe 创建 Windows 应用程序 
/t[arget]:library 创建库程序集 
/platform:<platform> 限制此代码可以在其上运行的平台;必须是 x86、Itanium、x64 或 anycpu。默认为 anycpu 
? 输入文件 - 
/autoref[+|-] 基于导入的命名空间和完全限定名称自动引用程序集(默认情 
况下为 on) 
/lib:<path> 指定要在其中搜索引用的附加目录 
/r[eference]:<file list> 从指定的程序集文件引用元数据 <file list>: <assembly name>[;<assembly name>...] 
? 资源 - 
/win32res:<file> 指定 Win32 资源文件(.res) 
/res[ource]:<info> 嵌入指定的资源 <info>: <filename>[,<name>[,public|private]] 
/linkres[ource]:<info> 将指定的资源链接到此程序集 <info>: <filename>[,<name>[,public|private]] 
? 代码生成 - 
/debug[+|-] 发出调试信息 
/fast[+|-] 禁用语言功能以使代码更好地生成 
/warnaserror[+|-] 将警告视为错误 
/w[arn]:<level> 设置警告等级(0-4) 
? 杂项 - 
@<filename> 有关更多选项,请阅读响应文件 
/? 显示帮助 
/help 显示帮助 
/d[efine]:<symbols> 定义条件编译符号 
/nologo 不显示编译器版权标志 
/print[+|-] 提供 print() 函数 
? 高级 - 
/codepage:<id> 使用指定的代码页 ID 打开源文件 
/lcid:<id> 将指定的 LCID 用于消息和默认代码页 
/nostdlib[+|-] 不导入标准库(mscorlib.dll)并将 autoref 默认值更改为 off 
/utf8output[+|-] 以 UTF-8 字符编码形式发出编译器输出 
/versionsafe[+|-] 为没有标记为“override”或“hide”的成员指定默认值

创建 .exe 文件

先创建 JS 文件(C:\test\helloWorld.js),内容如下:

var date = new Date(); print('Hello World! \nToday is ' + date );

接着我们进行编译:

C:\test>jsc helloWorld.jsMicrosoft (R) JScript Compiler version 8.00.50727for Microsoft (R) .NET Framework version 2.0.50727Copyright (C) Microsoft Corporation 1996-2005。保留所有权利。
你会惊讶的发现,C:\test 目录下多了个 helloWorld.exe 文件,非常简单吧,呵呵

最后我们可以直接执行 helloWorld.exe 文件:

C:\test>helloWorldHello World!Today is Fri Jun 3 23:13:20 UTC+8 2011
大功告成!!

创建 .dll 文件

.dll 文件的创建也同样非常简单:

package LibHW { 
class HelloWorld { 
function run() { 
var date = new Date(); 
return 'Hello World! \nToday is ' + date; 
} 
} 
}

编译语句:

C:\test>jsc /t:library LibHW.js
对于生成的 LibHW.dll 文件,我们可以通过创建新的 .exe 文件(consumer.js ?> consumer.exe)以导入模块的方式调用(类似于 Python)。

先创建 consumer.js 文件:

import LibHW;var hw = new LibHW.HelloWorld();print(hw.run());
然后编译 consumer.js 文件,执行 consumer.exe:

C:\test>jsc consumer.jsMicrosoft (R) JScript Compiler version 8.00.50727for Microsoft (R) .NET Framework version 2.0.50727Copyright (C) Microsoft Corporation 1996-2005。保留所有权利。C:\test>consumerHello World!Today is Sat Jun 4 00:42:35 UTC+8 2011
当然你还可以创建 windows 的应用,上例中的 consumer.js 文件修改如下:

import System.Windows.Forms; // this has a MessageBox class 
import LibHW; var hw = new LibHW.HelloWorld(); 
MessageBox.Show( 
hw.run(), 
"Dude!", 
MessageBoxButtons.OK, 
MessageBoxIcon.Exclamation 
);

编译语句:

C:\test>jsc /t:winexe consumer.js
双击新生成的 consumer.exe 文件,哈哈,是不是很有成就感!

从上面的例子可以看到 JScript 的潜力无限,没有做不到,只有想不到。

扩展阅读:

  • 《Make your javascript a Windows .exe》
  • 《JavaScript shell scripting》
Javascript 相关文章推荐
js玩一玩WSH吧
Feb 23 Javascript
Mootools 1.2教程 滚动条(Slider)
Sep 15 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
Apr 15 Javascript
jquery 隐藏与显示tr标签示例代码
Jun 06 Javascript
JavaScript实现的类字典插入或更新方法实例
Jul 10 Javascript
js+css实现文字散开重组动画特效代码分享
Aug 21 Javascript
jquery实现滑屏大图定时收缩为小banner图片的广告代码
Sep 02 Javascript
vue keep-alive请求数据的方法示例
May 16 Javascript
vue解决使用webpack打包后keep-alive不生效的方法
Sep 01 Javascript
js实现查询商品案例
Jul 22 Javascript
JS操作JSON常用方法(10w阅读)
Dec 06 Javascript
javascript实现数字时钟效果
Feb 06 Javascript
JS模拟面向对象全解(二、类型与赋值)
Jul 13 #Javascript
JS模拟面向对象全解(一、类型及传递)
Jul 13 #Javascript
一些实用的jQuery代码片段收集
Jul 12 #Javascript
formValidator3.3的ajaxValidator一些异常分析
Jul 12 #Javascript
在IE浏览器中resize事件执行多次的解决方法
Jul 12 #Javascript
JQuery获取当前屏幕的高度宽度的实现代码
Jul 12 #Javascript
Jquery进度条插件 Progress Bar小问题解决
Jul 12 #Javascript
You might like
destoon官方标签大全
2014/06/20 PHP
php使用explode()函数将字符串拆分成数组的方法
2015/02/17 PHP
Yii框架布局文件的动态切换操作示例
2019/11/11 PHP
js 纯数字不重复排列的另类方法
2010/07/17 Javascript
javascript 保存文件到本地实现方法
2012/11/29 Javascript
浅谈javascript回调函数
2014/12/07 Javascript
Nodejs为什么选择javascript为载体语言
2015/01/13 NodeJs
js随机生成字母数字组合的字符串 随机动画数字
2015/09/02 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
使用node.js中的Buffer类处理二进制数据的方法
2016/11/26 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
解决jquery appaend元素中id绑定事件失效的问题
2017/09/12 jQuery
axios post提交formdata的实例
2018/03/16 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
Vue-cli@3.0 插件系统简析
2018/09/05 Javascript
使用 vue 实例更好的监听事件及vue实例的方法
2019/04/22 Javascript
vue实现日历备忘录功能
2020/09/24 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
VUE使用 wx-open-launch-app 组件开发微信打开APP功能
2020/08/11 Javascript
探究一道价值25k的蚂蚁金服异步串行面试题
2020/08/21 Javascript
[04:10]2016国际邀请赛中国区预选赛第二日TOP10精彩集锦
2016/06/28 DOTA
深入解析Python中的变量和赋值运算符
2015/10/12 Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
2017/06/07 Python
python中pylint使用方法(pylint代码检查)
2018/04/06 Python
Python中几种属性访问的区别与用法详解
2018/10/10 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
CSS3实现酷炫的3D旋转透视效果
2019/11/21 HTML / CSS
HTML5使用drawImage()方法绘制图像
2014/06/23 HTML / CSS
四个太阳教学反思
2014/02/01 职场文书
入党积极分子学习两会心得体会范文
2014/03/17 职场文书
微笑服务演讲稿
2014/05/13 职场文书
希特勒经典演讲稿
2014/05/19 职场文书
任命书范本大全
2014/06/06 职场文书
爱护环境卫生倡议书
2015/04/29 职场文书
三八红旗手先进事迹材料(2016推荐版)
2016/02/25 职场文书
Redis高并发防止秒杀超卖实战源码解决方案
2021/11/01 Redis