让 .NET 程序 Autorun(转)

2024-03-19 03:18
文章标签 程序 net autorun

本文主要是介绍让 .NET 程序 Autorun(转),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近,在群里讨论的时候看到一个很有趣的需求,所以研究了一下。下面是研究出来来的结果。

有没有想过,想用.NET做一个演示程序或者做个光盘的MENU。但却苦于,机器上没有.NET 而无法运行。

或许你认为这个很简单,做个安装程序不就可以了,但实际上,这样自动运行的程序,不适合制作安装程序, 或者说,他应该不需要安装。

也许你认为这个也容易,用Dot NET 虚拟机不久好了。没错,用这个,确实可以,不过会有几个问题。

第一,会有一个兼容性的问题。毕竟精简了.NET 类库,只有几个少数文件。
第二,版权问题。

实际上,大家可能都没有注意这个问题,但如果自己找,还是有人说的,飞信 用的那个虚拟机,是购买而来的。因此,你用了用了,就算是盗版了。这个问题,在国内,或许没人深究,但在国外就不同了,这也是我写本文的原因之一。

还有,另一种,解决方式,就是用VC++ 写一个引导,不过这对于我们这些不熟悉VC的人,是一个麻烦。

不知道,大家最近有没有关注 SQL2008呢?尝试过的人,一定会发现一个很细节的不同,那就是,安装的引导界面不同了。

SQL2008

实际上,在这个之前,还会有一个东西出来,那就是,提示你 安装 .NET Framework 3.5 SP1 。为什么会这样呢?因为,新的引导程序,就是.NET 做的了。

clip_image002

本文,将会指导你,如何让VS帮助我们生成这样的Loader,在没有安装.NET 的机器上,自动安装.NET Framework, 在已安装的机器上,直接运行程序。

注意: 由于需要手动修改项目文件, 因此操作错误,可能会使项目出现问题。请在对已有的工程修改前,做好备份。

先说一下原理, 做Client程序,应该都会知道ClickOnce,通过它,可以快速制作一个安装程序,来部署项目。在部署的时候,选择依赖,这样在安装的时候,如果 客户端,没有相应的组件,就会自动安装。这个就是Bootstrapper,用于检查程序依赖项,并自动安装的启动程序。我们的任务,就是定这个 Bootstrapper,将它指向的安装程序,对准我们实际要运行的程序,这样就达到了上面的目的。

那么我们开始吧,这里,为了演示,我将新建一个Win Form程序, 当然,你也可以用一个已有的项目,不过,记得要备份哦!


1、新建一个项目,名字为 AutorunDotNet。 这里要说明的是,我选择的是.NET 3.5,实际上,你也可以选择.NET 2.0 的程序。另外,要说的一点是,我用的是VB.NET ,但实际上,我们是修改的项目文件,和语言无关。

           clip_image003
2、简单修改一下项目。 (实际上,可以不用做这个。)

           clip_image001[12]

3、设置项目依赖。

a.双击解决方案中的“My Project” ,打开项目属性页。

      clip_image005

b.选择 “发布” 选项卡, 单击 “系统必备”。

       clip_image006

c.在“系统必备”里, 确保选择 “ 创建用于安装系统必备组件的安装程序”, 然后 下发,选择 需要安装的系统必备组件。 最后,在“指定系统必备组件的安装位置” 里,选择 “从与我的应用程序相同的位置下载系统必备组件”, 单击 确定 。(注:你可以不必设置这个,这样,安装程序,会在网络上下载,安装程序。)

       clip_image007

恩,准备工作差不多了。下面开始修改项目文件吧。

4、编辑项目

a.卸载项目
       右键单击项目, 选择 “卸载项目”
            clip_image008  
         注:如果,VS没有显示, 需要打开 “工具” ——“选项”,找到“项目和解决方案”, 选择 “总是显示解决方案”。

            clip_image009

b.编辑项目

         右键 单击“AutotrunDotNet”,选择“编辑 AutorunDotNet.vbProj”。
                clip_image010  

5、在开的项目文件里,找到以下内容。(默认在项目结尾)
    clip_image011

a.将这段内容改成如下样子。

 

Code
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
-->
< Target Name ="BeforeBuild" >
</ Target >
< Target Name ="AfterBuild" >
< GenerateBootstrapper
ApplicationFile ="$(TargetFileName)"
ApplicationName
="$(AssemblyName)"
ApplicationUrl
="$(_DeploymentFormattedApplicationUrl)"
BootstrapperItems
="@(BootstrapperPackage)"
OutputPath
="$(TargetDir)"
ComponentsLocation
="$(BootstrapperComponentsLocation)"
Path
="$(GenerateBootstrapperSdkPath)" />
</ Target >

 

b.修改好后,保存。 在右键 单击“AutorunDotNet”项目,选择“重新加载项目”。

 

clip_image010[1]

6、OK,修改完成。编译一下看看。

如果没有错误,你将会在输出的文件夹下,看到一下内容。

   clip_image012

这个Setup.exe,就是我们要的Loader。 2个文件夹里的是.NET 安装程序 和 Windows Installer 3.1 。

补充一点, 这个方法,目前还不能自动生成 Autorun.inf 。

因此只能我们自己手动写一个了,不是很难。( 虽然我很想人让它自动,生成,但没有找到相关资料。)

 Autorun.inf

[ autorun ]
open
= setup.exe
icon
= setup.exe , 0  

其他说明

这个,我在VS2008 SP1上测试的, 根据MSDN的说法, 这个最低适用于 VS2005

如果怕影响当前项目,可以新建一个项目,专门用来做这个~

还有这里,简单说明一下 <GenerateBootstrapper > 就是用来生成实Bootstrapper 。

ApplicationFile="$(TargetFileName)" 这个指定要运行的程序名字,这里这个参数,是默认项目输出的名字。

ApplicationName="$(AssemblyName)" 程序的名字,即在执行的时候,提示的。这里是程序集的名字。

OutputPath="$(TargetDir)" 输出位置, 这里默认是项目输出的文件夹

其他的属性,请参考http://msdn.microsoft.com/zh-cn/library/ms164294.aspx

事例代码在这里下载 http://code.msdn.microsoft.com/AutorunDotNET

在这里简述一下,当初在群提出这个问题的情况。(由于实际信息,可能不方便说书,所以,决定,不说!!)

这个公司,给客户做了一个网站的演示程序,用WinForm作的。 之后,要把这个程序刻录到光盘,送给客户。

但因为是.NET 做的, 在没有.NET 的机器上,程序就无法运行。 反之,有因为商业程序,客户不见得会懂得很多开发信息。也不好让客户自己安装.NET 。

所以,需要一个确保的机制。 在没有.NET的机器上自动安装,之后并自动运行程序。

实际上,当时在讨论的时候,说了2点,一是 用 飞信的虚机, 二是写一个VC++的程序。

但这2点 都不符合, 一是,客户是 国外的,对用了带版权的东西,有多说头。 二是, 他们公司里面的没有人懂VC++。

=================

Q&A

=================

Q:错误 1 系统必备的安装位置未设置为“组件供应商的网站”,无法在磁盘上找到项“.NET Framework 3.5 SP1”中的文件“DotNetFX35SP1/dotNetFX20/aspnet.msp”。有关详细信息,请参见“帮助”。

A:VS 2008 SP1 升级后,并没安装.NET 3.5 SP1 完整版的 Bootstrapper,而只是复制了几个文件。 因此,默认是按配置中的信息,从网络上下载的在线安装版本。 你可以按照下面的方法,制作离线的完整版。或者在这里下载完整版的 复制到 Bootstrapper下。

  下面是官方的方法。

 

  更新包数据

1、打开 [Program Files]/Microsoft SDKs/Windows/v6.0A/Bootstrapper/Packages/DotNetFx35SP1 文件夹。
2、在“记事本”中编辑 Product.xml 文件。


将下面的内容粘贴到 < PackageFiles > 元素中:
< PackageFile Name="TOOLS/clwireg.exe" />
< PackageFile Name="TOOLS/clwireg_x64.exe" />
< PackageFile Name="TOOLS/clwireg_ia64.exe" />

下载并提取核心安装文件

1、导航到以下 URL:http://go.microsoft.com/fwlink?LinkID=118080
2、将 dotNetFx35.exe 文件下载到本地磁盘上。

3、打开“命令提示符”窗口,然后更改到下载 dotNetFx35.exe 的目录。

4、在命令提示符下键入:

dotNetFx35.exe /x:。

5、这可将 Framework 文件提取至当前目录下的一个名为 “WCU” 的文件夹中。
复 制 WCU/dotNetFramework 文件夹的内容并将其粘贴到 %Program Files%/Microsoft SDKs/Windows/v6.0A/Bootstrapper/Packages/DotNetFx35SP1 文件夹中(在 x64 操作系统上为 %ProgramFiles(x86)%/Microsoft SDKs/Windows/v6.0A/Bootstrapper/Packages/DotNetFx35SP1)。注意:请不要复制 WCU/dotNetFramework 文件夹自身。WCU 文件夹下应包括 5 个文件夹,现在每个文件夹应显示在 DotNetFx35SP1 文件夹中。文件夹结构应类似下面这样:


DotNetFx35SP1(文件夹)

dotNetFX20(文件夹)
dotNetFX30(文件夹)
dotNetFX35(文件夹)
dotNetMSP(文件夹)
TOOLS(文件夹)
en(一些其他本地化文件夹)
dotNetFx35setup.exe(文件)

 

现在可以删除在步骤 2 和步骤 4 中下载和提取的文件和文件夹。 

 
下载语言包支持文件

 

1、有关下载位置,请参考下表。

2、导航至所提供的 URL,出现提示后,下载到表中所指示的 dotNetFx35SP1 文件夹的子目录中。注意:必须对 x86 和 x64 文件各执行一次该操作,即使您的包无需支持 x64 也是如此。

简体中文、x86(源 URL:"http://go.microsoft.com/fwlink?LinkID=118146 " ,目标:zh-CHS/DotNetFX35/x86)
简体中文、x64(源 URL:"http://go.microsoft.com/fwlink?LinkID=118151 " ,目标:zh-CHS/DotNetFX35/x64)
繁体中文、x86(源 URL:"http://go.microsoft.com/fwlink?LinkID=118087 " ,目标:zh-CHT/DotNetFX35/x86)
繁体中文、x64(源 URL:"http://go.microsoft.com/fwlink?LinkID=118050 " ,目标:zh-CHT/DotNetFX35/x64)
英语:N/A
法语、x86(源 URL:"http://go.microsoft.com/fwlink?LinkID=118148 " ,目标:fr/DotNetFX35/x86)
法语、x64(源 URL:"http://go.microsoft.com/fwlink?LinkID=118153 " ,目标:fr/DotNetFX35/x64)
德语、x86(源 URL:"http://go.microsoft.com/fwlink?LinkID=118149 " ,目标:de/DotNetFX35/x86)
德语、x64(源 URL:"http://go.microsoft.com/fwlink?LinkID=118154 " ,目标:de/DotNetFX35/x64)
意大利语、x86(源 URL:"http://go.microsoft.com/fwlink?LinkID=118097 " ,目标:it/DotNetFX35/x86)
意大利语、x64(源 URL:"http://go.microsoft.com/fwlink?LinkID=118115 " ,目标:it/DotNetFX35/x64)
日语、x86(源 URL:"http://go.microsoft.com/fwlink?LinkID=118096 " ,目标:ja/DotNetFX35/x86)
日语、x64(源 URL:"http://go.microsoft.com/fwlink?LinkID=118114 " ,目标:ja/DotNetFX35/x64)
朝鲜语、x86(源 URL:"http://go.microsoft.com/fwlink?LinkID=118147 " ,目标:ko/DotNetFX35/x86)
朝鲜语、x64(源 URL:"http://go.microsoft.com/fwlink?LinkID=118152 " ,目标:ko/DotNetFX35/x64)
葡萄牙语 – 巴西、x86(源 URL:"http://go.microsoft.com/fwlink?LinkID=118092 " ,目标:pt-BR/DotNetFX35/x86)
葡萄牙语 – 巴西、x64(源 URL:"http://go.microsoft.com/fwlink?LinkID=118110 " ,目标:pt-BR/DotNetFX35/x64)
俄语、x86(源 URL:"http://go.microsoft.com/fwlink?LinkID=118090 " ,目标:ru/DotNetFX35/x86)
俄语、x64(源 URL:"http://go.microsoft.com/fwlink?LinkID=118108 " ,目标:ru/DotNetFX35/x64)
西班牙语、x86(源 URL:"http://go.microsoft.com/fwlink?LinkID=118101 " ,目标:es/DotNetFX35/x86)
西班牙语、x64(源 URL:"http://go.microsoft.com/fwlink?LinkID=118119 " ,目标:es/DotNetFX35/x64)

       --------------------------------------------------

如果,你下载完之前的,可以下载Product.XML 的更新 http://www.mediafire.com/file/gol0tgw71uu/product.rar

http://www.mediafire.com/file/zgsnbnamakd/DotNetFX35SP1.part1.rar

http://www.mediafire.com/file/pxuewxs5rcm/DotNetFX35SP1.part2.rar

http://www.mediafire.com/file/kovaclwgvez/DotNetFX35SP1.part3.rar

 

将以上文件解压至 Bootstrapper 文件夹下即可。

如果链接出现问题,请回复。

 

PS. 本打算,直接分享一个来的, 结果,看了一下容量, 我晕倒了。 316MB

如果能找到一个好的空间的话, 稍后会上传上来。

 

在这里说一个题外话,很多人都说 .NET 太大了。 实际上,一点点细节没有注意。

.NET 3.5 之后,提供的程序包,里面,实际上包含了 X64 X86 2 个平台的安装程序。另外,由于, Vista 以上的系统内置 .NET ,因此,对这个平台的安装,又使用了 MSU 。所以,最终,的结果是,包含了 2 类系统的安装程序,每种又有 X86 X64 平台的安装文件。

PS. 刚才瞄了一下, MSU 里,居然还有一个安腾的 X64 。那上面的就。。。

Q:怎样更改引导程序的图标和名称呢?
A:很抱歉,这个生成,图标资源,无法更改。因此,图标只能。。。  以后可能会研究看看,但希望恐怕不大, 因为 VS 所有生成的 安装程序(ClickOnce和MSI) 都是这个图标。但听说ClickOnce ,在.NET 3.5 SP1 有够个重大变革,可以自定义安装界面。不过这个还没有深入研究。如果,放入到光盘上的话,可以通过修改Autorun.inf 更改光盘的显示图标。
[autorun]
open=setup.exe
icon=AutorunDotNet.exe,0
将Icon指定光盘的图标,可以是个ICO文件。

至于,文件名称,这个可以自由更改,没有限制。

本文转自:http://www.cnblogs.com/GSonOVB/archive/2008/09/02/1280685.html

 

tastelife:在装有VS2010的机器上没有 使用以下内容
将下面的内容粘贴到 < PackageFiles > 元素中:
< PackageFile Name="TOOLS/clwireg.exe" />
< PackageFile Name="TOOLS/clwireg_x64.exe" />
< PackageFile Name="TOOLS/clwireg_ia64.exe" />

这篇关于让 .NET 程序 Autorun(转)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/824609

相关文章

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程

Python程序的文件头部声明小结

《Python程序的文件头部声明小结》在Python文件的顶部声明编码通常是必须的,尤其是在处理非ASCII字符时,下面就来介绍一下两种头部文件声明,具有一定的参考价值,感兴趣的可以了解一下... 目录一、# coding=utf-8二、#!/usr/bin/env python三、运行Python程序四、

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

SpringBoot后端实现小程序微信登录功能实现

《SpringBoot后端实现小程序微信登录功能实现》微信小程序登录是开发者通过微信提供的身份验证机制,获取用户唯一标识(openid)和会话密钥(session_key)的过程,这篇文章给大家介绍S... 目录SpringBoot实现微信小程序登录简介SpringBoot后端实现微信登录SpringBoo

uniapp小程序中实现无缝衔接滚动效果代码示例

《uniapp小程序中实现无缝衔接滚动效果代码示例》:本文主要介绍uniapp小程序中实现无缝衔接滚动效果的相关资料,该方法可以实现滚动内容中字的不同的颜色更改,并且可以根据需要进行艺术化更改和自... 组件滚动通知只能实现简单的滚动效果,不能实现滚动内容中的字进行不同颜色的更改,下面实现一个无缝衔接的滚动

Java使用WebView实现桌面程序的技术指南

《Java使用WebView实现桌面程序的技术指南》在现代软件开发中,许多应用需要在桌面程序中嵌入Web页面,例如,你可能需要在Java桌面应用中嵌入一部分Web前端,或者加载一个HTML5界面以增强... 目录1、简述2、WebView 特点3、搭建 WebView 示例3.1 添加 JavaFX 依赖3

防止SpringBoot程序崩溃的几种方式汇总

《防止SpringBoot程序崩溃的几种方式汇总》本文总结了8种防止SpringBoot程序崩溃的方法,包括全局异常处理、try-catch、断路器、资源限制、监控、优雅停机、健康检查和数据库连接池配... 目录1. 全局异常处理2. 使用 try-catch 捕获异常3. 使用断路器4. 设置最大内存和线