.NET6打包部署到Windows Service

来源:https://www.cnblogs.com/chenyishi/archive/2022/10/28/16836455.html
-Advertisement-
Play Games

1.安裝Nuget包 安裝以下nuget包支持windows service <PackageReference Include="Microsoft.AspNetCore.Hosting.WindowsServices" Version="6.0.10" /> <PackageReference ...


1.安裝Nuget包

安裝以下nuget包支持windows service

    <PackageReference Include="Microsoft.AspNetCore.Hosting.WindowsServices" Version="6.0.10" />
    <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.1" />

2.設置ContentRootPath

不設置ContentRootPath會指向C盤sc.exe所在文件夾。

var options = new WebApplicationOptions
{
    Args = args,
    ContentRootPath = WindowsServiceHelpers.IsWindowsService() ? AppContext.BaseDirectory : default
};

var builder = WebApplication.CreateBuilder(options);

3.啟用WIndowsService

通過以下方法即可啟用WIndowsService支持

builder.Host.UseWindowsService();

4.發佈項目

右鍵項目,進行發佈,發佈到文件夾

5.簡單安裝

通過以下BASH命令,實現安裝/開始/停止/刪除windows service

安裝

set "CDir=%~dp0"
sc.exe create "MyService" start=auto binpath="%CDir%MyService.exe --environment Development"

啟動

sc.exe start "MyService"

停止

sc.exe stop "MyService"

刪除

sc.exe delete "MyService"

 

6.安裝打包工具

安裝Inno Setup打包工具

安裝好後,進行漢語支持支持。打開Inno Setup安裝目錄,預設C:\Program Files (x86)\Inno Setup 6。

複製Default.isl,將其拷貝至C:\Program Files (x86)\Inno Setup 6\Languages文件夾,並重命名為Chinese.isl

將以下內容覆蓋到Chinese.isl

 ; *** Inno Setup version 5.5.0+ Chinese messages ***
 ;
 ; To download user-contributed translations of this file, go to:
 ;   http://www.jrsoftware.org/files/istrans/
 ;
 ; Note: When translating this text, do not add periods (.) to the end of
 ; messages that didn't have them already, because on those messages Inno
 ; Setup adds the periods automatically (appending a period would result in
 ; two periods being displayed).
 
 [LangOptions]
 ; The following three entries are very important. Be sure to read and?
 ; understand the '[LangOptions] section' topic in the help file.
 LanguageName=Chinese
 LanguageID=$0409
 LanguageCodePage=0
 ; If the language you are translating to requires special font faces or
 ; sizes, uncomment any of the following entries and change them accordingly.
 ;DialogFontName=
 ;DialogFontSize=8
 ;WelcomeFontName=Verdana
 ;WelcomeFontSize=12
 ;TitleFontName=Arial
 ;TitleFontSize=29
 ;CopyrightFontName=Arial
 ;CopyrightFontSize=8
 
 [Messages]
 
 ; *** Application titles
 SetupAppTitle=安裝
 SetupWindowTitle=安裝 - %1
 UninstallAppTitle=卸載
 UninstallAppFullTitle=%1 卸載
 
 ; *** Misc. common
 InformationTitle=安裝信息
 ConfirmTitle=提示
 ErrorTitle=錯誤
 
 ; *** SetupLdr messages
 SetupLdrStartupMessage=現在將安裝 %1。是否繼續?
 LdrCannotCreateTemp=不能創建臨時文件。安裝中止!
 LdrCannotExecTemp=不能在臨時目錄中解壓文件,安裝過程中止!
 
 ; *** Startup error messages
 LastErrorMessage=%1.%n%n 錯誤 %2: %3
 SetupFileMissing=在安裝目錄中找不到文件 %1 。請更正該問題或者獲得一個新的文件。
 SetupFileCorrupt=安裝文件被占用。請獲得一個新的安裝文件。
 SetupFileCorruptOrWrongVer=安裝文件被占用, 或者安裝文件的版本不對。請更正該問題或者獲得一個新文件。
 NotOnThisPlatform=該程式不能在 %1 下運行。
 OnlyOnThisPlatform=該程式必須在 %1 下運行。
 OnlyOnTheseArchitectures=該程式只能在以下WINDOWS版本下運行:%n%n%1
 MissingWOW64APIs=該版本需要64位的安裝程式。要更正該問題,請安裝 Service Pack %1。
 WinVersionTooLowError=該軟體需要 %1 版本號 %2 或者更高。
 WinVersionTooHighError=該軟體不能在 %1 版本號 %2 或者更高版本中安裝。
 AdminPrivilegesRequired=您在安裝該程式時必須是管理員許可權。
 PowerUserPrivilegesRequired=您在安裝程式是必須是管理員許可權或者高許可權用戶許可權。
 SetupAppRunningError=安裝程式檢測到 %1 正在運行。%n%n請關閉它的所有實例。然後單擊“確認”繼續安裝,或者單擊“放棄”退出。UninstallAppRunningError=卸載程式檢測到 %1 正在運行。%n%n請關閉它的所有實例。然後單擊“確認”繼續安裝,或者單擊“放棄”退出。
 
 ; *** Misc. errors
 ErrorCreatingDir=安裝程式不能創建目錄 "%1"
 ErrorTooManyFilesInDir=不能在目錄"%1" 下創建文件。因為該目錄下有太多的文件了。
 
 ; *** Setup common messages
 ExitSetupTitle=退出安裝
 ExitSetupMessage=安裝沒有完成。 如果您現在退出,程式將不被安裝。%n%n您可以下次在完成安裝任務。%n%n退出安裝?
 AboutSetupMenuItem=關於安裝程式[&A]...
 AboutSetupTitle=關於安裝程式
 AboutSetupMessage=%1 版本 %2%n%3%n%n%1 主頁:%n%4
 AboutSetupNote=
 TranslatorNote=
 
 ; *** Buttons
 ButtonBack=< 回退[&B]
 ButtonNext=下一步[&N] >
 ButtonInstall=安裝[&I]
 ButtonOK=確認
 ButtonCancel=放棄
 ButtonYes=市[&Y]
 ButtonYesToAll=全部確認[&A]
 ButtonNo=否[&N]
 ButtonNoToAll=全部否認[&o]
 ButtonFinish=完成[&F]
 ButtonBrowse=瀏覽[&B]...
 ButtonWizardBrowse=瀏覽[&r]...
 ButtonNewFolder=新建文件夾[&M]
 
 ; *** "Select Language" dialog messages
 SelectLanguageTitle=選擇安裝語言種類
 SelectLanguageLabel=選擇該語言作為安裝語言:
 
 ; *** Common wizard text
 ClickNext=單擊“下一步”繼續,或者單擊“放棄”退出本安裝程式。
 BeveledLabel=
 BrowseDialogTitle=瀏覽文件夾
 BrowseDialogLabel=在下麵的列表中選擇一個目錄, 然後單擊“確認”繼續。
 NewFolderName=新文件夾
 
 ; *** "Welcome" wizard page
 WelcomeLabel1=歡迎進入 [name] 安裝嚮導
 WelcomeLabel2=將在您的電腦上安裝 [name/ver] 。%n%n建議在繼續安裝之前退出其它程式的運行。
 
 ; *** "Password" wizard page
 WizardPassword=密碼
 PasswordLabel1=本安裝程式受密碼保護。
 PasswordLabel3=請輸入密碼,密碼區分大小寫。然後單擊“下一步”繼續。
 PasswordEditLabel=密碼[&P]:
 IncorrectPassword=輸入的密碼不正確,請重新輸入。
 
 ; *** "License Agreement" wizard page
 WizardLicense=用戶許可協議
 LicenseLabel=請在繼續之前仔細閱讀用戶許可協議。
 LicenseLabel3=請仔細閱讀下麵的用戶許可協議。在繼續安裝之前,您必須接受該協議。
 LicenseAccepted=我接受協議[&a]。
 LicenseNotAccepted=我不接受協議[&d]
 
 ; *** "Information" wizard pages
 WizardInfoBefore=提示
 InfoBeforeLabel=在繼續安裝之前請仔細閱讀以下重要的信息。
 InfoBeforeClickLabel=當您準備好繼續安裝時,單擊“繼續”。
 WizardInfoAfter=信息
 InfoAfterLabel=在繼續安裝之前請仔細閱讀以下重要的信息。
 InfoAfterClickLabel=當您準備好繼續安裝時,單擊“繼續”。
 
 ; *** "User Information" wizard page
 WizardUserInfo=用戶信息
 UserInfoDesc=請輸入您的信息。
 UserInfoName=用戶名[&U]:
 UserInfoOrg=組織[&O]:
 UserInfoSerial=序列號[&S]:
 UserInfoNameRequired=您必須輸入一個名稱。
 
 ; *** "Select Destination Location" wizard page
 WizardSelectDir=選擇目標位置
 SelectDirDesc=您將把[name]安裝在哪裡?
 SelectDirLabel3=安裝程式將把[name]安裝在下麵的的文件夾中。
 SelectDirBrowseLabel=為了繼續安裝, 請單擊“下一步”。如果您想選擇一個不同的目錄,請單擊“瀏覽”。
 DiskSpaceMBLabel=為了安裝本軟體,至少需要 [mb] MB 的空閑磁碟空間。
 ToUNCPathname=安裝程式不能安裝到一個 UNC 目錄名稱。如果您試圖網上安裝本程式,請映射網路驅動器。
 InvalidPath=您比如輸入一個含盤符的路徑名稱。比如:%n%nC:\APP%n%n 或者一個網路路徑,例如:%n%n\\server\share
 InvalidDrive=您選擇的磁碟或者網路路徑不存在或者不能訪問。請重新選擇其它的磁碟或者網路路徑。
 DiskSpaceWarningTitle=磁碟空間不足。
 DiskSpaceWarning=安裝程式至少需要 %1 KB 空閑磁碟空間來安裝本軟體。但是選擇的磁碟上只有 %2 KB 空間可用。%n%n 您確認繼續?
 DirNameTooLong=該文件夾的名稱太長。
 InvalidDirName=該文件夾的名字太長。
 BadDirName32=文件夾名稱中不能包括以下的任何字元:%n%n%1
 DirExistsTitle=文件夾已經存在
 DirExists=文件夾:%n%n%1%n%n已經存在。您想繼續安裝?
 DirDoesntExistTitle=文件夾不存在
 DirDoesntExist=文件夾:%n%n%1%n%n不存在。您想創建該文件夾?
 
 ; *** "Select Components" wizard page
 WizardSelectComponents=選擇部件
 SelectComponentsDesc=哪些部件需要安裝?
 SelectComponentsLabel2=選擇您想要安裝的部件; 清除您不想安裝的部件。當您準備好後,請單擊“下一步” 。
 FullInstallation=完全安裝
 ; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
 CompactInstallation=精簡安裝
 CustomInstallation=自定義安裝
 NoUninstallWarningTitle=部件存在
 NoUninstallWarning=安裝程式檢測到以下部件已經在您的電腦中被安裝了:%n%n%1%n%n不選擇它們將不在您的電腦中安裝它們。%n%n您想就這樣繼續嗎?
 ComponentSize1=%1 KB
 ComponentSize2=%1 MB
 ComponentsDiskSpaceMBLabel=當前選擇項至少需要 [mb] MB 的空閑磁碟空間才能安裝。
 
 ; *** "Select Additional Tasks" wizard page
 WizardSelectTasks=選擇一個附加任務
 SelectTasksDesc=您想選擇哪個附加任務?
 SelectTasksLabel2=選擇在安裝[name]時執行的附加任務, 然後單擊“下一步”。
 
 ; *** "Select Start Menu Folder" wizard page
 WizardSelectProgramGroup=選擇開始菜單文件夾
 SelectStartMenuFolderDesc=您想在哪裡放置軟體的快捷方式?
 SelectStartMenuFolderLabel3=安裝程式將在下麵的文件夾中創建軟體的快捷方式。
 SelectStartMenuFolderBrowseLabel=為了繼續,單擊“下一步”。如果您想另外選擇一個文件夾,單擊“瀏覽”。
 MustEnterGroupName=您必須輸入一個文件夾名稱。
 GroupNameTooLong=文件夾名稱或者路徑名稱太長。
 InvalidGroupName=文件夾名稱非法。
 BadGroupName=文件夾名字中不能包含下麵的字元:%n%n%1
 NoProgramGroupCheck2=不創建開始菜單中的文件夾[&D]
 
 ; *** "Ready to Install" wizard page
 WizardReady=準備開始安裝
 ReadyLabel1=安裝程式開始在您的電腦中安裝[name].
 ReadyLabel2a=單擊“安裝”開始安裝本軟體,或者單擊“回退”修改安裝設置。
 ReadyLabel2b=單擊“安裝”開始安裝本軟體。
 ReadyMemoUserInfo=用戶信息:
 ReadyMemoDir=安裝目標位置:
 ReadyMemoType=安裝種類:
 ReadyMemoComponents=選中的部件:
 ReadyMemoGroup=開始菜單文件夾:
 ReadyMemoTasks=附加任務:
 
 ; *** "Preparing to Install" wizard page
 WizardPreparing=準備安裝
 PreparingDesc=安裝程式準備在您的電腦中安裝[name]。
 PreviousInstallNotCompleted=安裝/卸載一個以前的程式沒有完成。您需要重新啟動您的電腦來完成安裝工作。%n%n當重新啟動您的電腦後,請運行安裝程式來完成安裝[name]。
 CannotContinue=安裝程式不能繼續執行。請單擊“放棄”退出。
 
 ; *** "Installing" wizard page
 WizardInstalling=安裝中
 InstallingLabel=安裝程式正在安裝[name],請等待。
 
 ; *** "Setup Completed" wizard page
 FinishedHeadingLabel=[name]安裝完成
 FinishedLabelNoIcons=安裝程式已經在您的電腦中安裝了[name]。
 FinishedLabel=安裝程式已經在您的電腦中安裝了[name]。要執行本軟體,請單擊安裝好的本軟體圖標 。
 ClickFinish=單擊“完成”退出本安裝程式.
 FinishedRestartLabel=為了完成[name]的安裝, 安裝程式必須重新啟動您的電腦。您想現在就重新啟動?
 FinishedRestartMessage=為了完成[name]的安裝, 安裝程式必須重新啟動您的電腦。%n%您想現在就重新啟動?
 ShowReadmeCheck=是的,我想查看 README 文件
 YesRadio=是的,我想重新啟動電腦[&Y]
 NoRadio=不,我將稍後重新啟動電腦[&N]
 ; used for example as 'Run MyProg.exe'
 RunEntryExec=運行 %1
 ; used for example as 'View Readme.txt'
 RunEntryShellExec=查看 %1
 
 ; *** "Setup Needs the Next Disk" stuff
 ChangeDiskTitle=安裝程式需要下一個安裝盤
 SelectDiskLabel2=請插入安裝盤 %1 並且單擊“確認”。%n%n如果該盤不是下麵顯示的盤,請輸入正確的路徑或者單擊“瀏覽”。
 PathLabel=目錄[&P]:
 FileNotInDir2=在 "%2" 中沒有發現文件。請插入正確的磁碟或者選擇其它的文件夾。
 SelectDirectoryLabel=請輸入下一個磁碟中的正確位置。
 
 ; *** Installation phase messages
 SetupAborted=安裝沒有完成。%n%n請修複錯誤並重新安裝。
 EntryAbortRetryIgnore=單擊“重試”重新嘗試,單擊“忽略”將繼續安裝,或者單擊“放棄”退出安裝。
 
 ; *** Installation status messages
 StatusCreateDirs=創建目錄中...
 StatusExtractFiles=解壓文件中...
 StatusCreateIcons=創建快捷方式中...
 StatusCreateIniEntries=創建INI單元中...
 StatusCreateRegistryEntries=創建註冊表內容中...
 StatusRegisterFiles=註冊文件中...
 StatusSavingUninstall=保存卸載信息中...
 StatusRunProgram=正在完成安裝...
 StatusRollback=恢複原來修改的內容中...
 
 ; *** Misc. errors
 ErrorInternal2=內部錯誤: %1
 ErrorFunctionFailedNoCode=%1 失敗
 ErrorFunctionFailed=%1 失敗; 代碼 %2
 ErrorFunctionFailedWithMessage=%1 錯誤; 代碼 %2.%n%3
 ErrorExecutingProgram=不能執行文件:%n%1
 
 ; *** Registry errors
 ErrorRegOpenKey=在打開註冊表鍵時發生錯誤:%n%1\%2
 ErrorRegCreateKey=在創建註冊表鍵時發生錯誤:%n%1\%2
 ErrorRegWriteKey=在些註冊表鍵時發生錯誤:%n%1\%2
 
 ; *** INI errors
 ErrorIniEntry=在創建INI文件時發生錯誤 "%1".
 
 ; *** File copying errors
 FileAbortRetryIgnore=單擊“重試”再試一次,單擊“忽略”忽略該文件,或者單擊“放棄”退出安裝程式。
 FileAbortRetryIgnore2=單擊“重試”再試一次,單擊“忽略”忽略該文件繼續安裝,或者單擊“放棄”退出安裝程式。
 SourceIsCorrupted=源文件被使用
 SourceDoesntExist=源文件 "%1" 不存在
 ExistingFileReadOnly=該已經存在的文件是只讀屬性。%n%n單擊“重試”刪除只讀屬性並重新嘗試,單擊“忽略”忽略該文件,或者單擊“放棄”退出安裝程式。
 ErrorReadingExistingDest=當試圖讀取一個已經存在的文件時發生了錯誤:
 FileExists=該文件已經存在。%n%n您想覆蓋它嗎?
 ExistingFileNewer=已經存在的文件比安裝程式試圖安裝的文件要新。建議您保留該文件。%n%n您想保留已經存在的文件嗎?
 ErrorChangingAttr=當試圖改變一個存在的文件的屬性時發生了錯誤:
 ErrorCreatingTemp=當試圖在目標目錄中創建一個文件時發生了錯誤:
 ErrorReadingSource=當試圖讀取一個文件時發生了錯誤:
 ErrorCopying=當試圖複製一個文件時發生了錯誤:
 ErrorReplacingExistingFile=當試圖覆蓋已經存在的文件時發生錯誤:
 ErrorRestartReplace=重新啟動置換失敗:
 ErrorRenamingTemp=當在目標目錄中重命名文件時發生錯誤:
 ErrorRegisterServer=不能註冊 DLL/OCX: %1
 ErrorRegisterServerMissingExport=沒有Dll註冊服務庫輸出
 ErrorRegisterTypeLib=不能註冊以下類型庫: %1
 
 ; *** Post-installation errors
 ErrorOpeningReadme=當打開 README 文件時發生錯誤。
 ErrorRestartingComputer=安裝程式不能重新啟動電腦。請手動啟動。
 
 ; *** Uninstaller messages
 UninstallNotFound=文件 "%1" 不存在。不能卸載。
 UninstallOpenError=文件 "%1" 不能打開。不能卸載。
 UninstallUnsupportedVer=卸載記錄文件 "%1" 不是基於本安裝程式的版本。不能完成軟體的刪除工作。
 UninstallUnknownEntry=一個未知的實體 (%1) 存在於卸載記錄文件中。
 ConfirmUninstall=您確定完全刪除 %1 和所有基於它上面的部件嗎?
 UninstallOnlyOnWin64=該安裝程式只能在64位的Windows上執行卸載工作。
 OnlyAdminCanUninstall=該安裝程式只能在您具有管理員許可權時才能執行卸載工作。
 UninstallStatusLabel= %1 正在被刪除,請稍等。
 UninstalledAll=%1 被成功地從您的電腦中刪除。
 UninstalledMost=%1 刪除完成。%n%n有某些部件不能被刪除。您可能需要手動刪除它們。
 UninstalledAndNeedsRestart=為了完成 %1 的刪除工作, 您必須重新啟動電腦。%n%n您想現在就重新啟動嗎?
 UninstallDataCorrupted=文件"%1" 被占用。不能完成刪除工作。
 
 ; *** Uninstallation phase messages
 ConfirmDeleteSharedFileTitle=刪除共用程式文件?
 ConfirmDeleteSharedFile2=系統指出以下的共用程式文件將不再被使用。您是否想刪除這些共用文件?%n%n如果這些文件刪除後,其他程式仍然要使用它,可能其它程式的功能將受影響。如果您不能肯定,請選擇“否”。讓這些文件保留在系統中不會對系統造成損害。
 SharedFileNameLabel=文件名:
 SharedFileLocationLabel=位置:
 WizardUninstalling=卸載
 StatusUninstalling=卸載 %1 中...
 
 ; The custom messages below aren't used by Setup itself, but if you make
 ; use of them in your scripts, you'll want to translate them.
 
 [CustomMessages]
 
 NameAndVersion=%1 版本 %2
 AdditionalIcons=附加圖標:
 CreateDesktopIcon=創建桌面圖標[&d]
 CreateQuickLaunchIcon=創建快速啟動圖標[&Q]
 ProgramOnTheWeb=%1 on the Web
 UninstallProgram=卸載 %1
 LaunchProgram=執行 %1
 AssocFileExtension=用文件擴展名 %2 匹配[&A] %1?
 AssocingFileExtension=正在用文件擴展名 %2 匹配[&A] %1 中...

7.打包

打開Inno Setup,通過右上角File->New新建Inno Setup打包文件。設置應用程式信息

 

設置安裝目錄為前面的程式發佈目錄

 

添加卸載快捷鍵

 

 設置licence信息

 

 選擇安裝模式

 

 選擇漢化語言

 

 設置輸出目錄

 

 腳本中添加安裝命令,卸載命令

[Run]
Filename: "{sys}\sc.exe"; Parameters: "stop MyService" ; Flags: runhidden
Filename: "{sys}\sc.exe"; Parameters: "delete MyService" ; Flags: runhidden
Filename: "{sys}\sc.exe"; Parameters: "create MyService start=auto binPath=""{app}\MyWeb.exe""" ; Flags: runhidden
Filename: "{sys}\sc.exe"; Parameters: "start MyService" ; Flags: runhidden

[UninstallRun]
Filename: "{sys}\sc.exe"; Parameters: "stop MyService" ; Flags: runhidden
Filename: "{sys}\sc.exe"; Parameters: "delete MyService" ; Flags: runhidden

腳本最終內容

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "MyService"
#define MyAppVersion "1.0.0"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "https://www.example.com/"

[Setup]
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{0C9603FD-2587-41FD-A532-CB5294E7B56E}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={autopf}\{#MyAppName}
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
LicenseFile=D:\Mylicence.txt
InfoBeforeFile=D:\Myshowafter.txt
InfoAfterFile=D:\Myshowbefore.txt
; Uncomment the following line to run in non administrative install mode (install for current user only.)
;PrivilegesRequired=lowest
OutputDir=C:\Users\c\Desktop
OutputBaseFilename=mysetup
Compression=lzma
SolidCompression=yes
WizardStyle=modern

[Languages]
Name: "chinese"; MessagesFile: "compiler:Languages\Chinese.isl"

[Files]
Source: "D:\MyWeb\bin\Release\net6.0\publish\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"


[Run]
Filename: "{sys}\sc.exe"; Parameters: "stop MyService" ; Flags: runhidden
Filename: "{sys}\sc.exe"; Parameters: "delete MyService" ; Flags: runhidden
Filename: "{sys}\sc.exe"; Parameters: "create MyService start=auto binPath=""{app}\MyWeb.exe""" ; Flags: runhidden
Filename: "{sys}\sc.exe"; Parameters: "start MyService" ; Flags: runhidden

[UninstallRun]
Filename: "{sys}\sc.exe"; Parameters: "stop MyService" ; Flags: runhidden
Filename: "{sys}\sc.exe"; Parameters: "delete MyService" ; Flags: runhidden

8.打包編譯

點擊編譯按鈕,打包好後,雙擊exe安裝

9.檢驗安裝

首先去windows 服務查看是否安裝成功

 

然後訪問服務

 

 

 至此打包安裝完成。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • SpringBoot 簡介 為什麼要使用 Spring Boot 因為 Spring,SpringMVC 需要使用的大量的配置文件 (xml文件) 還需要配置各種對象,把使用的對象放入到 spring 容器中才能使用對象 需要瞭解其他框架配置規則。 SpringBoot 就相當於 不需要配置文件的 ...
  • 目錄 一. EGL 前言 二. EGL 繪製流程簡介 三.eglGetError 函數簡介 四.eglGetError 函數使用 五.猜你喜歡 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL ES 學習路線推薦 : O ...
  • 以下為本人的學習筆記 1.認識枚舉 枚舉不是類,是跟類,介面同級別的類型, 枚舉就是限制某個類型的變數的取值只能為諾幹個固定值中的一個,否則編譯器就會報錯; 枚舉可以讓編譯器在編譯時就可以控制源程式賦給的非法值,使用普通變數的方式在開發階段無法實現這一目標 在JDK1.5之後,使用關鍵字enum定義 ...
  • JWT的含義 Json web token(JWT),是為了在網路應用環境間傳遞聲明而執行的一種基於JSON的開放標準(RFC 7519),該token被設計為緊湊且安全的,特別適用於分散式站點的單點登錄(sso)場景,JWT的聲明一般被用來在身份提供者和服務者間傳遞被認證的用戶身份信息,以便於從資 ...
  • C++中 Const修飾的量叫常量,與普通變數的區別是什麼? C++中有兩點1:編譯方式不同,在編譯的過程中,所有在程式中出現名字的地方都會被初值替換掉 2:不能作為左值了 const 修飾的量常出現的使用錯誤有: 1:常量作為左值修改值 (因為這種方式可以直接修改常量的值) 2:把常量的地址泄漏給 ...
  • 前言 大家早好、午好、晚好吖~ 環境使用: Python 3.8 Pycharm 模塊使用: import requests >>> pip install requests 內置模塊 你安裝好python環境就可以了 import re import json 模塊安裝問題: 如果安裝python ...
  • 一. 布爾類型和比較運算符 bool布爾類型 True:真1;Flase:假0 變數名稱 = 布爾變數字面量 eg:bool_1 = True 比較運算符 通過<比較運算符>計算得到布爾類型的結果 二. if語句的基本格式 if 語句格式: if 條件語句: True,do sth 註意事項: 條件 ...
  • 以下為本人的學習筆記 1.為什麼需要泛型 public class GenericDeom{ @Test public void test1(){ List list = new ArrayList(); list.add("tste"); list.add(10); list.add(new Ob ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...