我有一個需要在離線機器上保護的軟體。我的問題如下 1-經過一些程式檢查運行我的應用程式的機器是否有許可證,如果沒有,則應用程式通過此代碼自行洗掉
Private Sub SelfDestruct()
Dim procDestruct As Process = New Process()
Dim strName As String = "destruct.bat"
Dim strPath As String = Path.Combine _
(Directory.GetCurrentDirectory(), strName)
Dim strExe As String = New _
FileInfo(Application.ExecutablePath).Name
Dim swDestruct As StreamWriter = New StreamWriter(strPath)
swDestruct.WriteLine("attrib """ & strExe & """" &
" -a -s -r -h")
swDestruct.WriteLine(":Repeat")
swDestruct.WriteLine("del " & """" & strExe & """")
swDestruct.WriteLine("if exist """ & strExe & """" &
" goto Repeat")
swDestruct.WriteLine("del """ & strName & """")
swDestruct.Close()
procDestruct.StartInfo.FileName = "destruct.bat"
procDestruct.StartInfo.CreateNoWindow = True
procDestruct.StartInfo.UseShellExecute = False
Try
procDestruct.Start()
Catch ex As Exception
Close()
End Try
End Sub
它作業得很好 4 年,直到我發現我需要添加另一種方法來更改機器名稱,并且作業和實際更改名稱的唯一方法是但也從 bat 檔案中進行。(沖突來了)
Private Sub PCRename()
Dim Renameact As Process = New Process()
Dim newname As String = "rename.bat"
Dim strName As String = "rename.bat"
Dim strPath As String = Path.Combine _
(Directory.GetCurrentDirectory(), strName)
Dim Renametext As StreamWriter = New StreamWriter(strPath)
Dim rename As String = "wmic computersystem where name=""%computername%"" call rename name="
Dim source As New System.Text.StringBuilder
Renametext.WriteLine("@echo off")
Renametext.WriteLine(rename """" newname """")
Renametext.WriteLine("shutdown /r -t 10")
Renametext.WriteLine("del """ & strName & """")
Renametext.Close()
Renameact.StartInfo.FileName = "rename.bat"
Renameact.StartInfo.CreateNoWindow = True
Renameact.StartInfo.UseShellExecute = False
MessageBox.Show("Computer will restart to complete the setup", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning)
Try
Renameact.Start()
Application.ExitThread()
Application.Exit()
Catch ex As Exception
Close()
End Try
End Sub
現在每次更改名稱時應用程式都會自行洗掉,即使我沒有呼叫“SelfDestruct”
我嘗試了代碼,但在注釋了“SelfDestruct”的完整代碼后,當我取消注釋“SelfDestruct”并再次測驗問題時,應用程式并沒有自行洗掉,應用程式仍然會自行洗掉。
我在每個地方搜索了 2 天,但沒有運氣。
有沒有辦法分離方法或清理 StreamWriter(我試過 Flush() 和 Dispose(),仍然沒有用)。
謝謝你。
uj5u.com熱心網友回復:
出于某種原因,這條線是導致我的應用程式被洗掉的原因
Renametext.WriteLine("del """ & strName & """")
當我洗掉它時,應用程式會保留,但也會保留 rename.bat 檔案,我想洗掉它,所以沒有人會錯誤地啟動 bat 檔案。
uj5u.com熱心網友回復:
為了最終解決這個問題,我從重命名方法中洗掉了以下行
Renametext.WriteLine("del """ & strName & """")
然后在呼叫方法后添加這一行
Exit Sub
然后使用此代碼在下次啟動時洗掉 rename.bat 檔案
Dim Filenames As String = "rename.bat"
Dim FilePath As String = "" & AppDomain.CurrentDomain.BaseDirectory & "" & Filenames & ""
If System.IO.File.Exists(FilePath) = True Then
System.IO.File.Delete(FilePath)
End If
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/431814.html
上一篇:批處理:從路徑讀取檔案
