[C#] Correr apenas 1 Processo/Instancia

DerEngel

Power Member
Tenho um programa que basicamente abre uma imagem, quando se carrega 2x na imagem em questão (no explorer)

Acontece que quando abrir outra imagem e se o programa estiver a correr, ele abre outro programa, ficando com 2 processos/instancias.

O que queria fazer era basicamente o que o photoshop ou outro programa de imagens faz, abre sempre as imagens no processo que está a correr.

Anyone ?

Este é o código para abrir os ficheiros no programa pelo explorer:

Código:
        static void Main(string[] args)
        {

            string Selected = "";

            if (args.Length > 0)
                Selected = Convert.ToString(args[0]);

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

            Form1 app = new Form1();
            app.SelectedFile = Selected;
            Application.Run(app);

        }
 
Última edição:
Tens de ter em conta dois passos.
1º Adquirir os parâmetros do processo;
2º Verificar se já existe um processo activo (se a app já está a correr em outro processo)

Para captar os parâmetros poens isto na class principal (onde inicia a app)
Por ex: podes adquirir o directório da imagem..
Código:
//Verifica os parâmetros (isto é criado por o shell do windows)
{
    string sCommand = Interaction.Command();
    
    if ((!string.IsNullOrEmpty(Interaction.Command()))) {
    }
    //Aqui porcessas os parametors..
}
De seguidas adicionas este codigo para verificar se já existe outra instancia da app a correr..
Código:
//Não permite executar várias vezes em simultâneo a aplicação.
//Verifica se a aplicação, já está em execução.. se estiver obtem a dir temporaria defenida por o outro processo, converte o PDF e termina o processo..
{
    if (Information.UBound(Process.GetProcessesByName(Process.GetCurrentProcess.ProcessName)) > 0) {
        System.Environment.Exit(0);
    }
}
Hum http://www.bobpowell.net/singleinstance.htm bom código, a partir daí até podes sincronizar o processo =)

Compr.
 
Última edição:
Tens de ter em conta dois passos.
1º Adquirir os parâmetros do processo;
2º Verificar se já existe um processo activo (se a app já está a correr em outro processo)

Para captar os parâmetros poens isto na class principal (onde inicia a app)
Por ex: podes adquirir o directório da imagem..
Código:
//Verifica os parâmetros (isto é criado por o shell do windows)
{
    string sCommand = Interaction.Command();
    
    if ((!string.IsNullOrEmpty(Interaction.Command()))) {
    }
    //Aqui porcessas os parametors..
}
De seguidas adicionas este codigo para verificar se já existe outra instancia da app a correr..
Código:
//Não permite executar várias vezes em simultâneo a aplicação.
//Verifica se a aplicação, já está em execução.. se estiver obtem a dir temporaria defenida por o outro processo, converte o PDF e termina o processo..
{
    if (Information.UBound(Process.GetProcessesByName(Process.GetCurrentProcess.ProcessName)) > 0) {
        System.Environment.Exit(0);
    }
}
Hum http://www.bobpowell.net/singleinstance.htm bom código, a partir daí até podes sincronizar o processo =)

Compr.

Boas,

Tive a testar esse código e ele não me reconhece estes comandos:

Error 1 The name 'Interaction' does not exist in the current context
Error 1 The name 'Process' does not exist in the current context
Error 1 The name 'Information' does not exist in the current context

Tentei por o código em todo o lado, mas dá sempre isso.

EDIT:

Entretanto consegui só com um mutex ter só uma processo a correr, apenas tem um problema:

Quando abro uma imagem pelo programa pela 1º vez ele abre a imagem
A segunda que vou abrir outra imagem (com o programa aberto) não me abre mais nenhuma processo do programa, mas também não me abre a nova imagem no lugar da outra.
 
Última edição:
O que tu quererás fazer não será criar um singleton, isto é, uma classe principal que tem apenas 1 instância (que corresponde à instância do programa que está a correr) e, dentro dela, abrir as várias imagens?
 
Back
Topo