安裝部署項目(轉自)

1 新建安裝部署項目

打開VS,點擊新建項目,選擇:其他項目類型->安裝與部署->安裝向導(安裝項目也一樣),然后點擊確定。

2 安裝向導

關閉后打開安裝向導,點擊下一步,或者直接點擊完成。

3 開始制作

安裝向導完成后即可進入項目文件夾:

雙擊"應用程序文件夾"在右邊的空白處右擊,選擇添加->文件,將你的做的應用程序的可執行文件和相應的類庫和組件添加進來。然后右擊你的文件,創建快捷方式,然后把快捷方式分別復制或剪切到左邊的"用戶的'程序'菜單"和"用戶桌面"中。這樣安裝程序安裝完成后會在 "開始->所有程序"和"桌面"上生成程序的快捷方式。也可以直接在"用戶的'程序'菜單"和"用戶桌面"相應目錄下新建快捷方式,然后定位到你的文件。

然后右擊左邊的"應用程序文件夾"打開屬性對話框:將屬性中的"DefaultLocation"的路徑中的"[Manufacturer]"去掉,不然的話做好的安裝程序默認安裝目錄會是"C:\Program Files\你的用戶名\安裝解決方案名稱";

然后打開解決方案管理器,右擊你的解決方案名稱,選擇屬性:打開的屬性頁中,選擇"系統必備", 在打開的系統必備頁中,在"指定系統必備安裝組件的位置"中選中如下選擇項:從與我的應用程序相同的位置下載系統必備組件。選上以后,在生成的安裝文件包中包含.NetFramework組件 。好了,這樣就完成99%了,然后點擊"生成->生成解決方案",哈,生成成功!

4 制作完成

現在打開解決方案文件夾下的Debug文件夾,就可以看到生成的安裝文件了。

5 關于"卸載"功能的添加

上面只介紹了簡單的生成安裝的方法,但是在VS2005下并沒有直接生成卸載程序的功能,所以我們只好用msi來實現了,操作方法如下:

在添加你的應用程序項目的時候,多添加一個msiexec.exe進去,這個文件在c:\windows\system32文件夾下,添加進去以后,為了讓他更像個卸載程序,把他的名字改成"Uninstall.exe",當然這個關系不大,改不改都行。

然后創建一個快捷方式,放到"開始-程序"中,接下來我們要做的就是查找這個部署項目的ProductCode了,鼠標左鍵單擊項目名稱,記住是左鍵單擊,然后點擊屬性標簽,注意:不是右擊的屬性,這個區別很大,這時你就可以看到ProductCode了。

然后打開你創建的那個快捷方式的屬性對話框,在Aguements屬性中輸入"/x {ProductCode}",好了,然后點擊"生成解決方案"即可生成帶有卸載功能的安裝程序了。

轉自:http://www.cnblogs.com/Leo_wl/archive/2010/05/17/1737477.html

轉載于:https://www.cnblogs.com/johnwonder/archive/2010/05/21/1740615.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379227.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379227.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379227.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver

更改jdk,版本過高的緣故,更改jdk為1.7版本

kotlin 查找id_Kotlin程序查找給定范圍內的素數

kotlin 查找idA prime number is a natural number that is greater than 1 and cannot be formed by multiplying two smaller natural numbers. 質數是大于1的自然數,不能通過將兩個較小的自然數相乘而形成。 Given a range start and end, we have to print al…

socket代碼

客戶端:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <netdb.h> #include <sys/types.h> #include <sys/socket.h> int main(int argc,char *argv[]) {int sockfd,numbytes;char buf[100];struct sockaddr_in th…

棧應用_將算式轉成按運算符優先級分布(代碼、分析、匯編)

目錄&#xff1a;代碼&#xff1a;分析&#xff1a;匯編&#xff1a;代碼&#xff1a; LinkList.h LinkList.c LinkStack.h LinkStack.c 棧-線性表 main.c #include <stdio.h> #include "LinkStack.h"/* 該程序將 正常的算式 轉換成按照運算符優先分布的算式…

課堂筆記(一)

1&#xff0c;怎樣查詢函數的用法 help(函數名) 2&#xff0c;表達式float(0b1100010101)float(0o1425)float(0x315)的結果是什么&#xff0c;并說明原因 True 浮點類型的數用二進制八進制十六進制的不同表達 3&#xff0c;oct()方法 轉換八進制輸出 4&#xff0c;hex()方…

Struts2.0標簽使用之s:checkboxlist/

jsp代碼如下&#xff1a; <s:form action"receive.action" method"post"> <s:checkboxlist id"user" name"cheuser" list"#request.userlist" listKey"id" listValue"name" lab…

[轉]深入淺出Java設計模式之備忘錄模式

本文轉自&#xff1a;http://dev.yesky.com/450/2070450.shtml 一、引子   俗話說&#xff1a;世上難買后悔藥。所以凡事講究個“三思而后行”&#xff0c;但總常見有人做“痛心疾首”狀&#xff1a;當初我要是……。如果真的有《大話西游》中能時光倒流的“月光寶盒”&#…

遞歸問題(代碼、分析、匯編)

目錄&#xff1a;代碼&#xff1a;分析&#xff1a;匯編&#xff1a;代碼&#xff1a; main.c #include <stdio.h>//該程序使用遞歸將字符串從后往前依次輸出void reverse(char* s) {if( (s ! NULL) && (*s ! \0) ){reverse(s 1);printf("%c", *s);…

Java LocalDate類| ofYearDay()方法與示例

LocalDate類的YearDay()方法 (LocalDate Class ofYearDay() method) ofYearDay() method is available in java.time package. ofYearDay()方法在java.time包中可用。 ofYearDay() method is used to create an instance of LocalDate object that holds the value from the ye…

ASP.NET C#讀寫Cookie的方法!

Cookie (HttpCookie的實例)提供了一種在 Web 應用程序中存儲用戶特定信息的方法。例如&#xff0c;當用戶訪問您的站點時&#xff0c;您可以使用 Cookie 存儲用戶首選項或其他信息。當該用戶再次訪問您的網站時&#xff0c;應用程序便可以檢索以前存儲的信息。 創建Cookie方法…

遞歸-裴波那契數列(代碼、分析、匯編)

目錄&#xff1a;代碼&#xff1a;分析&#xff1a;匯編&#xff1a;代碼&#xff1a; main.c #include <stdio.h>//該程序輸出裴波那契數列 int fibonacci(int n) {if( n > 1 ){return fibonacci(n-1) fibonacci(n-2);//注意&#xff1a;這里調用是一直調用左邊函…

javascript 事件委派

javascript 模擬用戶操作 <a href"javascript:;" onClick"javascript:alert(131231);" id"abc">asdfasdf</a> <script> if(document.all) { document.getElementById(abc).fireEvent(onclick); } else { var evt document.cr…

Java Duration類| isNegative()方法與示例

持續時間類isNegative()方法 (Duration Class isNegative() method) isNegative() method is available in java.time package. isNegative()方法在java.time包中可用。 isNegative() method is used to check whether this Duration object holds the value of length < 0 …

經典例題(一)

1&#xff0c;已知復數 x 6 8j 請寫出它的模、實部、虛部及共軛復數的命令&#xff0c;并寫出運行結果。 X 6 8j print("模為:%d"% abs(X)) print("實部為:%s"% X.real) print("虛部為:%s"% X.imag) print("共軛復數為:%s"% X.co…

asterisk撥號規則

一、前言 本文檔以asterisk-1.4.32為基礎寫作而成&#xff0c;可能和其他版本有些區別。其中參考了一些別的書籍和文章。因為寫的比較倉促&#xff0c;而且基本都是晚上寫的&#xff0c;里面的內容邏輯性和語句沒有仔細斟酌&#xff0c;就是想到什么寫什么&#xff0c;難免有…

getseconds補0_Java Duration類| getSeconds()方法與示例

getseconds補0持續時間類getSeconds()方法 (Duration Class getSeconds() method) getSeconds() method is available in java.time package. getSeconds()方法在java.time包中可用。 getSeconds() method is used to return the number of seconds exists in this Duration. g…

遞歸-漢諾塔(代碼、分析、匯編)

代碼&#xff1a; #include <stdio.h>void hanoi(int n, char a, char b, char c) {if( n > 0 ){if( n 1 ){printf("%c -> %c\n", a, c);}else{hanoi(n-1, a, c, b);printf("%c -> %c\n", a, c);hanoi(n-1, b, a, c);}} }int main() {han…

if語句(四)

1&#xff0c;簡單if示例 phones [iphone,xiaomi,huawei,smartisan] for phone in phones:if phone huawei:print(phone.upper())#將字符串的所有字母大寫else:print(phone.title())#將字符串中的每個單詞的首字符大寫效果圖如下&#xff1a; 2&#xff0c;if條件測試 ph…

welcome to my blog

轉載于:https://www.cnblogs.com/jiangjun/archive/2012/10/22/2734600.html

kotlin字符串判空_Kotlin程序檢查空字符串,空字符串或NULL字符串

kotlin字符串判空Given a string, we have to check whether it is an empty, blank or NULL string. 給定一個字符串&#xff0c;我們必須檢查它是否為空&#xff0c;空白或NULL字符串。 Example: 例&#xff1a; Input:str ""Output:True用于在Kotlin中檢查Empt…