vb.net запускает gpg.exe. Шаг работы выполняется нормально с ПК, но не по расписанию агента SQL Server.
Все отлично работало с моей Visual Studio на моем компьютере, запустив это с помощью кнопки "Пуск". Когда я собирал исполняемый файл и копировал его в рабочий ящик и планировал задание с помощью агента SQL Server на рабочем компьютере - все работало нормально для создания файла, но бит шифрования не работает. Файл gpg.exe находится на рабочем сервере: \sql2014\c$\Program Files (x86)\GnuPG\bin
Gpg находится здесь на моем ПК: C:\Program Files (x86)\GnuPG\bin
Файл filename.csv создается в правильном месте, хорошо - я протестировал оба этих имени: Dim Extract_File As String = "\sql2014\e$\Extracts\ProgramName\filename.csv" 'Dim Extract_File As String = "E:\Extracts\ProgramName\filename.csv”', чтобы сделать это с моего компьютера, мне пришлось изменить E: на C:
Эта строка вызывает функцию: FileEncrypted = Encrypt_File(Extract_File, Batch_Timestamp)
Private Function Encrypt_File(File_To_Encrypt As String, Batch_Timestamp As Date)
On Error GoTo Encrypt_File_Error
Dim Success As Boolean = False
Dim sourceName As String = File_To_Encrypt
Dim gpgProcess = New Process()
‘Test with working directory - no effect
‘gpgProcess.StartInfo.UseShellExecute = False
'gpgProcess.StartInfo.WorkingDirectory = "\\sql2014\c$\Program Files (x86)\GnuPG\bin\"
‘gpgProcess.StartInfo.FileName = "gpg.exe"
gpgProcess.StartInfo.FileName = \\sql2014\c$\Program Files (x86)\GnuPG\bin\gpg.exe ‘This works from my PC
‘gpgProcess.StartInfo.FileName = \\sql2014\c$\Program Files (x86)\GnuPG\bn\gpg.exe ‘If I change this path took the “i” out of bin I get an error: The system cannot find the file specified
gpgProcess.StartInfo.UseShellExecute = False
gpgProcess.StartInfo.CreateNoWindow = True
gpgProcess.StartInfo.Arguments = "--batch --yes --recipient reciptname --encrypt " & sourceName
gpgProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
gpgProcess.Start()
gpgProcess.WaitForExit()
If FileExists(sourceName & ".gpg") Then
Success = True
End If
Encrypt_File_Exit:
On Error Resume Next
‘gpgProcess.WaitForExit() moved this up to
gpgProcess.Close()
Return Success
Exit Function
Encrypt_File_Error:
Error_Handler("SomeModule.vb", "Encrypt_File", Err, System_Output, Batch_Timestamp)
Resume Encrypt_File_Exit
End Function
Любые предложения о том, как я могу решить эту проблему. Когда он работает на моем компьютере, он создает файл filename.csv.gpg в том же каталоге, что и filename.csv. На рабочем сервере он не создает gpg и не выдает видимого сообщения об ошибке.
1 ответ
Вот как я решил эту проблему. Я установил OpenPgpLib из диспетчера пакетов NuGet и переписал эту функцию, как показано здесь. Я создал файл.asc из инструмента Kleopatra и сохранил его в месте, используемом в pubkey, в приведенном ниже фрагменте кода. OpenPgp из пакета.
Private Function Encrypt_File(File_To_Encrypt As String, Log_File As String, Batch_Timestamp As Date)
Dim Success As Boolean = False
Dim encryptthis As String = File_To_Encrypt
Dim thisencrypted As String = File_To_Encrypt & ".gpg"
Dim pubkey As String = "\\sql2014\c$\Data_Programs\MyDirectory\<thepublickeyfile>.asc"
Try
OpenPgp.EncryptFile(encryptthis, thisencrypted, pubkey, False, False)
If FileExists(thisencrypted) Then
Success = True
End If
Catch ex As Exception
App_Logger(Log_File, ex.StackTrace.ToString(), System_Output, Batch_Timestamp)
Success = False
End Try
Return Success
End Function