Просто дополнение ко всем прекрасным ответам выше на случай, если кто-то не понимает, насколько легко в VB / C # автоматизировать весь процесс вплоть до zip-архива.
Итак, вы просто берете простое приложение Forms из шаблонов (если у вас еще нет служебного приложения) и добавляете к нему кнопку, а затем ClickOnce устанавливаете его на свой рабочий стол, не беспокоясь о специальных настройках или многом другом. Это весь код, который вам нужно прикрепить к кнопке:
Imports System.IO.Compression
Private Sub btnArchive_Click(sender As Object, e As EventArgs) Handles btnArchive.Click
Dim src As String = "C:\Project"
Dim dest As String = Path.Combine("D:\Archive", "Stub" & Now.ToString("yyyyMMddHHmmss") & ".zip")
If IsProjectOpen() Then
MsgBox("Close projects first, (expletive deleted)", vbOKOnly)
Exit Sub
End If
If MsgBox("Are you sure you want to delete bin and obj folders?", vbOKCancel) = DialogResult.Cancel Then Exit Sub
If ClearBinAndObj(src) Then ZipFile.CreateFromDirectory(src, dest)
End Sub
Public Function ClearBinAndObj(targetDir As String) As Boolean
Dim dirstodelete As New List(Of String)
For Each d As String In My.Computer.FileSystem.GetDirectories(targetDir, FileIO.SearchOption.SearchAllSubDirectories, "bin")
dirstodelete.Add(d)
Next
For Each d As String In My.Computer.FileSystem.GetDirectories(targetDir, FileIO.SearchOption.SearchAllSubDirectories, "obj")
dirstodelete.Add(d)
Next
For Each d In dirstodelete
Try
Directory.Delete(d, True)
Catch ex As Exception
If MsgBox("Error: " & ex.Message & " - OK to continue?", vbOKCancel) = MsgBoxResult.Cancel Then Return False
End Try
Next
Return True
End Function
Public Function IsProjectOpen()
For Each clsProcess As Process In Process.GetProcesses()
If clsProcess.ProcessName.Equals("devenv") Then Return True
Next
Return False
End Function
Следует помнить, что при удалении файловой системы легко может произойти сбой. Одним из моих любимых моментов стало то, что я понял, что не могу удалить папку, потому что она содержит элементы, созданные Visual Studio при работе с повышенными привилегиями (чтобы я мог отлаживать службу).
Мне нужно было вручную дать разрешение или, я полагаю, запустить приложение с повышенными привилегиями. В любом случае, я думаю, что есть некоторая ценность в использовании интерактивного подхода на основе графического интерфейса к сценарию, особенно потому, что это, вероятно, что-то, что делается в конце долгого дня, и вы не хотите позже узнавать, что ваша резервная копия на самом деле не существует ...