0

こんにちは、コマンド ラインから実行できる GPG im を使用して zip を暗号化しようとしています。それをC#アプリケーションに統合すると、うまくいきました。しかし、Windowsサービスと統合すると、gpg2.exeが閉じられたためエラーが発生しました

例外の詳細は次のとおりです

Problem signature:
  Problem Event Name:   APPCRASH
  Application Name: gpg2.exe
  Application Version:  0.0.0.0
  Application Timestamp:    4fa14f63
  Fault Module Name:    StackHash_e51a
  Fault Module Version: 0.0.0.0
  Fault Module Timestamp:   00000000
  Exception Code:   c0000005
  Exception Offset: 00000000
  OS Version:   6.0.6002.2.2.0.272.7
  Locale ID:    1033
  Additional Information 1: e51a
  Additional Information 2: 4c0d4d78887f76d971d5d00f1f20a433
  Additional Information 3: e51a
  Additional Information 4: 4c0d4d78887f76d971d5d00f1f20a433

以下は、暗号化に使用しているコードです

public bool Encrypt(string inRecipient, string sourceFile, string destinationFile) {

/// File info
FileInfo fi = new FileInfo(sourceFile);

ProcessStartInfo s = new ProcessStartInfo("cmd.exe");
s.CreateNoWindow = true;
s.UseShellExecute = false;
s.RedirectStandardInput = true;
s.RedirectStandardOutput = true;
s.RedirectStandardError = true;
s.WorkingDirectory = new FileInfo(pgpPath).DirectoryName;

bool processExited = false;

using (Process p = Process.Start(s))
{

    string recipient = " --recipient \"" + inRecipient + "\"";
    string output = " --output \"" + destinationFile + "\"";
    string encrypt = " --encrypt \"" + sourceFile + "\"";
    string homedir = " --homedir \"" + HomeDirectory + "\"";
    string cmd = "\"" + PgpPath + "\" " + recipient + output + encrypt;

    p.StandardInput.WriteLine(cmd);
    p.StandardInput.Flush();
    p.StandardInput.Close();
    processExited = p.WaitForExit(3500);
    p.Close();
}
return processExited;

}

問題の署名を使用して何かを見つけることができません。助けてください

前もって感謝します!!

4

2 に答える 2

3

Process を使用する場合は、cmd.exe の代わりに gpg.exe を実行してみませんか? プロジェクトでこれを行ったばかりで、次のことを問題なく実行できました

private static void encrypt()
    {
        //have to list full path, adding to PATH had no effect 
        ProcessStartInfo gpg = new ProcessStartInfo(
            @"C:\Program Files (x86)\GnuPT\GPG\gpg.exe",
            @"--no-options --yes --armor --recipient ""recipient"" --encrypt ""file"""
        );
        Process.Start(gpg);
    }

すべてのコマンド ライン引数を 2 番目のパラメーターとして渡すだけです。

于 2013-07-26T19:32:38.047 に答える
2

これは、ユーザーコンテキストの問題が原因である可能性があります。おそらく、サービスが実行されているユーザーアカウントには、暗号化しようとしているファイルへのアクセス権がありません。

この理論をテストするには、サービスプロパティに移動し、[ログオン]タブに、ファイルにアクセスできることがわかっているアカウントを入力します。できれば、C#アプリケーションの実行に使用しているのと同じアカウント/パスワード

また、コードが相対パスではなく、ファイルへのフルパスを使用して暗号化されていることを確認する必要があります。

于 2012-09-04T17:51:49.530 に答える