亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

安裝與部署

系統(tǒng) 1828 0

一.創(chuàng)建部署.NET打包項(xiàng)目

1. 在“文件”菜單上指向“添加項(xiàng)目”,然后選擇“新建項(xiàng)目”。

2.?在“添加新項(xiàng)目”對(duì)話框中,選擇“項(xiàng)目類型”窗格中的“安裝和部署項(xiàng)目”,然后選擇“模板”窗格中的“安裝項(xiàng)目”。在“名稱”框中鍵入 setup。

3.?單擊“確定”關(guān)閉對(duì)話框。
?
4.?項(xiàng)目被添加到解決方案資源管理器中,并且文件系統(tǒng)編輯器打開。
?
5.?在“屬性”窗口中,選擇 ProductName 屬性,并鍵入?[ 項(xiàng)目名稱 ] 。
?
二.將主程序項(xiàng)目的輸出添加到部署項(xiàng)目中
?
1.?在“文件系統(tǒng)編輯器”中,選擇“應(yīng)用程序文件夾”。在“操作”菜單上,指向“添加”,然后選擇“項(xiàng)目輸出”。
?
2.?在“添加項(xiàng)目輸出組”對(duì)話框中,選擇“項(xiàng)目”下拉列表中的“你的程序”。
?
3.?單擊“確定”關(guān)閉對(duì)話框。
?
4.?從列表中選擇“主輸出”和“內(nèi)容文件”組,然后單擊“確定”。
?
三.創(chuàng)建安裝程序類
?
1.?在“文件”菜單上指向“新建”,然后選擇“項(xiàng)目”。
?
2.?在“新建項(xiàng)目”對(duì)話框中,選擇“項(xiàng)目類型”窗格中的“Visual Basic 項(xiàng)目”,然后選擇“模板”窗格中的“類庫(kù)”。在“名稱”框中鍵入 installDB。
?
3.?單擊“打開”關(guān)閉對(duì)話框。
?
4.?從“項(xiàng)目”菜單中選擇“添加新項(xiàng)”。
?
5.?在“添加新項(xiàng)”對(duì)話框中選擇“安裝程序類”。在“名稱”框中鍵入 installDB。
?
6.?單擊“確定”關(guān)閉對(duì)話框。
?
7.?詳細(xì)代碼附后。
?
四.創(chuàng)建自定義安裝對(duì)話框
?
1.?在解決方案資源管理器中選擇“setup1”項(xiàng)目。在“視圖”菜單上指向“編輯器”,然后選擇“用戶界面”。
2.?在用戶界面編輯器中,選擇“安裝”下的“啟動(dòng)”節(jié)點(diǎn)。在“操作”菜單上,選擇“添加對(duì)話框”。
3.?在“添加對(duì)話框”對(duì)話框中,選擇“許可協(xié)議”對(duì)話框,然后單擊“確定”關(guān)閉對(duì)話框。
4.?在“添加對(duì)話框”對(duì)話框中,選擇“文本框 (A)”對(duì)話框,然后單擊“確定”關(guān)閉對(duì)話框。
5.?在“操作”菜單上,選擇“上移”。重復(fù)此步驟,直到“文本框 (A)”對(duì)話框位于“安裝文件夾”節(jié)點(diǎn)之上。
6.?在“屬性”窗口中,選擇 BannerText 屬性并鍵入:安裝數(shù)據(jù)庫(kù).
7.?選擇 BodyText 屬性并鍵入:安裝程序?qū)⒃谀繕?biāo)機(jī)器上安裝數(shù)據(jù)庫(kù)
8.?選擇 Edit1Label 屬性并鍵入:數(shù)據(jù)庫(kù)名稱:
9.?選擇 Edit1Property 屬性并鍵入 CUSTOMTEXTA1
10.?選擇 Edit1Value 屬性并鍵入:dbservers
11.?選擇 Edit2Label 屬性并鍵入:服務(wù)器名:
12.?選擇 Edit2Property 屬性并鍵入 CUSTOMTEXTA2
13.?選擇 Edit2Value 屬性并鍵入:(local)
14.?選擇 Edit3Label 屬性并鍵入:用戶名:
15.?選擇 Edit3Value 屬性并鍵入:sa
16.?選擇 Edit3Property 屬性并鍵入 CUSTOMTEXTA3
17.?選擇 Edit4Label 屬性并鍵入:密碼:
18.?選擇 Edit4Property 屬性并鍵入 CUSTOMTEXTA4
19.?選擇 Edit2Visible、Edit3Visible 和 Edit4Visible 屬性,并將它們?cè)O(shè)置為 true
?
五.創(chuàng)建自定義操作
?
1.?在解決方案資源管理器中選擇“setup1”項(xiàng)目。在“視圖”菜單上指向“編輯器”,然后選擇“自定義操作”。
2.?在自定義操作編輯器中選擇“安裝”節(jié)點(diǎn)。在“操作”菜單上,選擇“添加自定義操作”。
3.?在“選擇項(xiàng)目中的項(xiàng)”對(duì)話框中,雙擊“應(yīng)用程序文件夾”。
4.?選擇“主輸出來(lái)自 installDB(活動(dòng))”項(xiàng),然后單擊“確定”關(guān)閉對(duì)話框。
5.?在“屬性”窗口中,選擇 CustomActionData 屬性并鍵入“/dbname=[CUSTOMTEXTA1] /server=[CUSTOMTEXTA2] /user=[CUSTOMTEXTA3] /pwd=[CUSTOMTEXTA4] /targetdir="[TARGETDIR]\"”。
?
附:/targetdir="[TARGETDIR]\"是安裝后的目標(biāo)路徑,為了在installDB類中獲得安裝后的路徑,我們?cè)O(shè)置此參數(shù)。
?
六 .NET打包時(shí)加入卸載功能:
?
方法一:
1.在.NET打包項(xiàng)目中添加文件msiexec.exe(一般可在c:\windows\system32\下找到)
2.在文件系統(tǒng)視圖中選擇應(yīng)用程序文件夾,在msiexec.exe上按右鍵,選擇創(chuàng)建快捷方式,重命名快捷方式為"卸載".
3.更改此快捷方式的Arguments 為"/x {產(chǎn)品id}",產(chǎn)品id的值為打包項(xiàng)目的ProductCode屬性值.
?
方法二:(推薦)
1.先生成安裝包,記下ProductCode(選擇解決方案資源管理器根目錄如setup1,再查看屬性標(biāo)簽,不是右鍵中的屬性),下面要用到
2.用VS.net建立一個(gè)新的控制臺(tái)程序uninst.exe文件
      
  1. 'power?by:?landlordh ?
  2. 'for?2000,xp,2003 ?
  3. Module?uninstall ?
  4. ????Sub?Main() ?
  5. ????????Dim?myProcess?As? Process ?=? New ?Process ?
  6. ????????If?System.Environment.OSVersion.ToString.IndexOf("NT?5")?Then ?
  7. ????????????myProcess.Start("msiexec",?"/X{2B65D4A9-C146-4808-AB4B-321FB0779559}")
    '改為自己的ProductCode ?
  8. ????????End?If ?
  9. ????????myProcess.Close() ?
  10. ????End?Sub ?
  11. End?Module ?
3.將控制臺(tái)程序BIN目錄的exe文件加入到打包程序文件中,在程序組創(chuàng)建uninst.exe的快捷方式
?
installdb.vb類,要添加引用 system.configuration.install.dll :
        
  1. usingSystem; ?
  2. usingSystem.Collections; ?
  3. usingSystem.ComponentModel; ?
  4. usingSystem.Configuration.Install; ?
  5. usingSystem.Reflection; ?
  6. usingSystem.IO; ?
  7. usingSystem.Data; ?
  8. usingSystem.Data.SqlClient; ?
  9. namespaceinstall{ ?
  10. /// ?
  11. ///Installer1的摘要說(shuō)明。 ?
  12. /// ?
  13. [RunInstaller(true)] ?
  14. publicclassInstaller1:System.Configuration.Install.Installer{ ?
  15. /// ?
  16. ///必需的設(shè)計(jì)器變量。 ?
  17. /// ?
  18. privateSystem.ComponentModel.Containercomponents = null ; ?
  19. publicInstaller1(){ ?
  20. //該調(diào)用是設(shè)計(jì)器所必需的。 ?
  21. InitializeComponent(); ?
  22. //TODO:在InitializeComponent調(diào)用后添加任何初始化 ?
  23. } ?
  24. /// ?
  25. ///清理所有正在使用的資源。 ?
  26. /// ?
  27. protectedoverridevoidDispose(booldisposing){ ?
  28. if(disposing){ ?
  29. if(components!=null){ ?
  30. components.Dispose(); ?
  31. } ?
  32. } ?
  33. base.Dispose(disposing); ?
  34. } ?
  35. ?
  36. #region組件設(shè)計(jì)器生成的代碼 ?
  37. /// ?
  38. ///設(shè)計(jì)器支持所需的方法-不要使用代碼編輯器修改 ?
  39. ///此方法的內(nèi)容。 ?
  40. /// ?
  41. privatevoidInitializeComponent(){ ?
  42. components = newSystem .ComponentModel.Container(); ?
  43. } ?
  44. #endregion ?
  45. privatestringGetSql(stringName){ ?
  46. ////調(diào)用osql執(zhí)行腳本 ?
  47. // ?
  48. // System.Diagnostics.ProcesssqlProcess = newSystem .Diagnostics.Process(); ?
  49. // ?
  50. // sqlProcess.StartInfo.FileName = "osql.exe" ; ?
  51. // ?
  52. // sqlProcess.StartInfo.Arguments = String .Format("-U{0}-P{1}-d{2}-i{3}db.sql",
    this.Context.Parameters["user"],this.Context.Parameters["pwd"],"master",this.
    Context.Parameters["targetdir"]); ?
  53. // ?
  54. // sqlProcess.StartInfo.WindowStyle = System .Diagnostics.ProcessWindowStyle.Hidden; ?
  55. // ?
  56. //sqlProcess.Start(); ?
  57. // ?
  58. //sqlProcess.WaitForExit();//等待執(zhí)行 ?
  59. // ?
  60. //sqlProcess.Close(); ?
  61. try{ ?
  62. // Assembly AssemblyAsm =Assembly.GetExecutingAssembly(); ?
  63. // System.IO.FileInfoFileInfo = newSystem .IO.FileInfo(Asm.Location); ?
  64. // stringpath = FileInfo .DirectoryName+@"\"+Name; ?
  65. stringpath = this .Context.Parameters["targetdir"]+Name; ?
  66. FileStreamfs = newFileStream (path,FileMode.Open,FileAccess.Read,FileShare.Read); ?
  67. StreamReaderreader = newStreamReader (fs,System.Text.Encoding.Default); ?
  68. //System.Text.Encoding.ASCII; ?
  69. returnreader.ReadToEnd(); ?
  70. } ?
  71. catch(Exceptionex){ ?
  72. Console.Write("InGetSql:"+ex.Message); ?
  73. throwex; ?
  74. } ?
  75. } ?
  76. privatevoidExecuteSql(stringDataBaseName,stringSql){ ?
  77. SqlConnectionsqlConnection1 = newSqlConnection (); ?
  78. sqlConnection1.ConnectionString = string .Format(" server ={0}; userid ={1}; password ={2};
  79. Database =master",this.Context.Parameters["server"],this.Context.Parameters["user"],
    this.Context.Parameters["
    pwd "]); ?
  80. System.Data.SqlClient.SqlCommandCommand = newSystem .Data.SqlClient.
    SqlCommand(Sql,sqlConnection1); ?
  81. try{ ?
  82. Command.Connection.Open(); ?
  83. Command.Connection.ChangeDatabase(DataBaseName); ?
  84. Command.ExecuteNonQuery(); ?
  85. } ?
  86. catch(Exceptionex){ ?
  87. Console.Write("Inexceptionhandler:"+ex.Message); ?
  88. } ?
  89. finally{ ?
  90. Command.Connection.Close(); ?
  91. } ?
  92. } ?
  93. protectedvoidAddDBTable(stringstrDBName){ ?
  94. try{ ?
  95. ExecuteSql("master","CREATEDATABASE"+strDBName); ?
  96. ExecuteSql(strDBName,GetSql("sql.txt")); ?
  97. ExecuteSql("master","execsp_addlogin'myoamaster','myoamaster','"+strDBName+"',Null,Null"); ?
  98. ExecuteSql(strDBName,"EXECsp_grantdbaccess'myoamaster','myoamaster'"); ?
  99. ExecuteSql(strDBName,"execsp_addrolemember'db_owner','myoamaster'"); ?
  100. } ?
  101. catch(Exceptionex){ ?
  102. Console.Write("Inexceptionhandler:"+ex.Message); ?
  103. } ?
  104. } ?
  105. publicoverridevoidInstall(System.Collections.IDictionarystateSaver){ ?
  106. base.Install(stateSaver); ?
  107. AddDBTable(this.Context.Parameters["dbname"]); ?
  108. } ?
  109. } ?
  110. }?

這里有個(gè)sql.txt是數(shù)據(jù)庫(kù)的sql腳本,當(dāng)然可以調(diào)用osql來(lái)執(zhí)行sql腳本,其實(shí)是一樣的。打包的時(shí)候必須把sql.txt文件加進(jìn)來(lái),否則不會(huì)執(zhí)行。如果你想附加數(shù)據(jù)庫(kù)的mdf文件和ldf文件,用下面這段程序:
      
  1. privatevoidCreateDataBase(stringstrSql,stringDataName,stringstrMdf,stringstrLdf) ?
  2. { ?
  3. Stringstr; ?
  4. SqlConnectionmyConn = newSqlConnection (strSql); ?
  5. //EXECsp_detach_db@ dbname = 'BX_FreightMileage_2' //需要先將數(shù)據(jù)庫(kù)分離出來(lái) ?
  6. str = "EXECsp_attach_db@dbname='" +DataName+"',@ filename1 = '"+strMdf+"' ,@ filename2 = '"+strLdf+"' "; ?
  7. SqlCommandmyCommand = newSqlCommand (str,myConn); ?
  8. ?
  9. myConn.Open(); ?
  10. myCommand.ExecuteNonQuery(); ?
  11. myConn.Close(); ?
  12. ?
  13. }?
當(dāng)然.NET打包項(xiàng)目也要把這兩個(gè)數(shù)據(jù)庫(kù)文件也加進(jìn)來(lái)。
?
?
?
123

安裝與部署


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 午夜欧美精品久久久久久久 | 日本久久黄色 | 一本久久精品一区二区 | 91综合久久婷婷久久 | 老司机午夜精品视频在线观看免费 | 亚洲精品乱码久久久久蜜桃 | 精品中文字幕一区二区三区四区 | 日韩久久精品 | 国产香蕉尹人综合在线 | 国产精品777| 欧美另类69xxxxx视频 | 91中文字幕yellow字幕网 | 美女久久久久 | 精品伊人久久久久7777人 | 精品国产看高清国产毛片 | 亚洲视频在线播放 | 久久久久久久亚洲精品 | 一区二区三区欧美在线 | 奇米影视在线视频8888 | 欧美成人免费在线观看 | se在线观看 | 偷偷狠狠的日日2020 | 五月天中文在线 | 日产精品一二三四区国产 | 伊人久久免费 | 天天操天天擦 | 欧美成人精品欧美一级乱黄 | 99精品免费在线观看 | 国产欧美亚洲精品综合在线 | 欧美日韩国产超高清免费看片 | 欧美成人啪啪看片 | 欧美日韩在线观看视频 | 久久精品视频免费 | 成人性色大片 | 久热国产精品 | 99在线精品日韩一区免费国产 | 国产精品成人免费视频 | 日韩一级视频免费观看 | 国产亚洲精品一区二区 | 四虎免费永久在线播放 | 一级免费看片 |