相关疑难解决方法(0)

MSMQ.在邮件存储在驱动器上时保持邮件正文加密

我的项目需要保持所有数据加密,因此MSMQ也需要加密.但是从文章(https://msdn.microsoft.com/en-us/library/ms704178(v=vs.85).aspx)中可以看出来自私有队列的消息默认存储在...\MSMQ\Storage中\ p000000x.mq文件.

配置专用队列时,将其隐私级别设置为"Body",当我将加密消息发送到此队列时,然后在文本查看器中打开...\MSMQ\Storage\p000000x.mq文件(我使用远程管理器十六进制编辑器) ),我看到消息的纯文本.它没有加密.要发送消息我使用下一个代码:

message.UseEncryption = true;
message.EncryptionAlgorithm = EncryptionAlgorithm.Rc2;
Run Code Online (Sandbox Code Playgroud)

尽管指定了消息加密,但消息...\MSMQ\Storage\p000000x.mq保持畅通.见下图.

在此输入图像描述 所以我的问题是:是否有一些内置工具可以在...\MSMQ\Storage\p000000x.mq文件中将邮件加密到驱动器上?或者我需要在发送到队列之前加密消息体,然后,当从队列中查看时,我需要解密它吗?

非常感谢!

c# encryption msmq message-queue fips

6
推荐指数
1
解决办法
989
查看次数

将参数传递给同一应用程序的另一个实例

我的小应用程序出现严重问题;基本上很容易理解:

我的软件,当打开时,做它的事情。

我想专注于打开另一个实例(我的意思是再次打开 .exe),检查它是否已经打开。如果不是简单地启动应用程序,而是它已经在运行(也称为第二个或更多实例)“简单地”传递输入参数(args 字符串数组)传递给第一个实例,那么它将适当地处理它。

这是我的程序.cs

static class Program
{
    static Mutex mutex = new Mutex(true, "{blabla}");

    [STAThread]
    static void Main(String[] args)
    {
        if (mutex.WaitOne(TimeSpan.Zero, true))
        {
            //First Instance!

            try
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);

                CALL A MY STATIC METHOD, DO SOME THINGS

                Application.Run(new Form1());
            }
            finally
            {
                mutex.ReleaseMutex();
            }
        }
        else
        {
            //Not-so-first instance!
            CALL A STATIC METHOD, 
            DO OTHER THINGS LIKE COMUNICATE WITH FIRST INSTANCE

            SIMPLY CLOSE.
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这只会(使用互斥锁)识别它是否已经打开,但(当然)它无法与主实例进行任何通信。

我已经尝试了很多东西,但我无法让它工作。

我试过这个但我真的不明白(在浪费了很多时间之后)如何放置我的“第一次”代码和“已经运行”的代码。

也试过MSMQ但我不能让它工作。 …

c# arguments msmq pipe instance

5
推荐指数
1
解决办法
2776
查看次数

队列不存在或您没有足够的权限来执行操作.通过MSMQ发送消息时出现异常

我创建了一个通过MSMQ发送消息但在执行时获得异常的函数.以下是我的功能.

public void SendMessageToQueue(ChessQueue chessQueue)
{
    MessageQueue queue = null;
    Message m = null;
    if (!MessageQueue.Exists(".\\Private$\\" + chessQueue.QueueName))
    {
        queue = new MessageQueue(".\\Private$\\chessqueue");
        chessQueue.Messages = new List<MessageObject>();
        chessQueue.Messages.Add(chessQueue.Message);
        queue.Formatter = new BinaryMessageFormatter();
        m = new Message();
        m.Body = chessQueue;
    }
    else
    {
        queue = new MessageQueue(".\\Private$\\" + chessQueue.QueueName);
        queue.Formatter = new BinaryMessageFormatter();
        m = queue.Receive();
        ChessQueue ExistingChessQueue = m.Body as ChessQueue;
        ExistingChessQueue.Messages.Add(chessQueue.Message);
        m.Body = ExistingChessQueue;
    }            
    queue.Send(m);
    // Getting Exception at this Line
}
Run Code Online (Sandbox Code Playgroud)

例外: - 队列不存在或您没有足够的权限来执行操作.

此外,我无法在"计算机管理"下打开"消息队列"的安全选项卡.请参见附件截图. 在此输入图像描述

我尝试在私人手动下创建消息队列,系统允许我这样做.见下文 在此输入图像描述

下面是mmc跨度. 在此输入图像描述

.net msmq message-queue send system.messaging

4
推荐指数
1
解决办法
8297
查看次数