C/C++ zabranenie viacnasobnemu spusteniu programu

Programovacie jazyky, rady, poradňa...
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8224
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

C/C++ zabranenie viacnasobnemu spusteniu programu

Príspevok od používateľa harrison314 »

Potrebujem aby moj program sa dal spustit len raz, (pri dalsom pokuse o jeho spustenie sa hned sam vypne )
povodne som to chcel riesit cez popen a cmd prikaz TASKLIST,
ale zistil som ,ze na Win XP SP3, akosi zmizol :cry: .
Rozmyslam nad Win Api .

Viete ako to riesit ?
Preetro
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 269
Registrovaný: 16 nov 2005, 19:40
Bydlisko: škatuľka od topánok

Re: C/C++ zabranenie viacnasobnemu spusteniu programu

Príspevok od používateľa Preetro »

co keby si pri prvom spusteni vytvoril nejaky subor a pri dalsom spusteni ak by ten subor existoal, tak by sa ti ten program hned vypol?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: C/C++ zabranenie viacnasobnemu spusteniu programu

Príspevok od používateľa audiotrack »

Preetro napísal:co keby si pri prvom spusteni vytvoril nejaky subor a pri dalsom spusteni ak by ten subor existoal, tak by sa ti ten program hned vypol?
to by musel pri vypnutí programu ten súbor zase zmazať, lebo ho už viac nikdy nespustí. V tom prípade je už efektívnejšie pracovať s registrami ako so súborom, ale problém bude ak bude program ukončený násilne a hodnota sa nezmaže (súbor sa neodstráni)
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: C/C++ zabranenie viacnasobnemu spusteniu programu

Príspevok od používateľa weroro »

a to sa v C-cku nedaju kontrolovat procesy? ked to dokaze taky flash.
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: C/C++ zabranenie viacnasobnemu spusteniu programu

Príspevok od používateľa chrono »

To záleží od toho, čo presne tým C myslíš. Ak jazyk, tak nevidím dôvod, prečo by tam niečo také malo byť (pretože C sa dá používať na tak rôznych platformách, že netuším, ako by malo fungovať univerzálne rozhranie).

Ak ale myslíš čokoľvek, čo sa dá naprogramovať v C (a nemusí to fungovať vždy a všade), tak potom možností je viac (napr. nejaký zdieľaný mutex, pamäť, rôzne signály...).
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: C/C++ zabranenie viacnasobnemu spusteniu programu

Príspevok od používateľa weroro »

Myslel som C/C++ len som chcel vnuknut napad ako by to mohol vyriesit.. ak som napisal fakt nieco nelogicke tak sa ospravedlnujem. ale ked ze C/C++ partri kvyssim jazykom tak som usudzoval, ze by nieco take mohlo existovat. ako som uz spomenul vo Flashi v ActionScripte takato moznost je.. dokonca nie je ani univerzalna ked ze flash je vyvijany hlavne pod dvomi platformamy (MAC, Windows). a pre kazdy ten to OS musi byt script na dekekciu spustenych procesov robeny zvlast
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: C/C++ zabranenie viacnasobnemu spusteniu programu

Príspevok od používateľa chrono »

C práve že patrí k tým nízko úrovňovým jazykom. :) (ale nejaké nástroje pre komunikáciu procesov obsahuje)

PS: Ak harrison314 potrebuje, aby to fungovalo len vo Windows, tak stačí použiť Google a určite nájde návody, ako sa to robí vo Windows (napr. dá hľadať okno s nejakou triedou pomocou funkcie FindWindowEx).
pipiak
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 321
Registrovaný: 11 jún 2006, 9:24
Bydlisko: KE
Kontaktovať používateľa:

Re: C/C++ zabranenie viacnasobnemu spusteniu programu

Príspevok od používateľa pipiak »

Pouzi WMI pre vyhladanie procesu pri spusteni programu...tusim klasa WIN32_PROCESS
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8224
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: C/C++ zabranenie viacnasobnemu spusteniu programu

Príspevok od používateľa harrison314 »

Takze po nejakom googleni a kodeni, som to vyriesil, je to pre Windows:

Kód: Vybrať všetko

#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <psapi.h>
#include <string.h>
//#pragma comment(lib,"../../lib/libpsapi.a")
using namespace std;
/*
 vyzaduje:
          #include <psapi.h>
          #include <string.h>
 prilinkovat libpsapi.a
 
 */
 
#define ShowProcess 1     // 1 pre ladenie programu, 0 vypne
 
#define maxprocess 300
int i_runned(char *prog)
{
    #if ShowProcess
     puts("Vypis procesov\n");
    #endif 
    char *z =strrchr(prog,'\\');
    if(z==NULL) z=prog;
    else z++;
    // v *z je meno aktualneho porcesu
    
    DWORD procesy[maxprocess];
    DWORD pocProc;
    
    if(! EnumProcesses(procesy, sizeof(procesy),& pocProc)) return 1;
    pocProc /= sizeof(DWORD);
    
    unsigned int i;
    int p=0;  // kolko je zhodnych procesov
    
    char procName[52];
    HMODULE hMod;
    HANDLE hProcess;
    DWORD pocMod;
    
    for(i=0;i<pocProc;i++)
    {
     if(procesy[i]==0) continue;
     hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE, procesy[i]);
     if(hProcess==NULL) continue;
     if( EnumProcessModules(hProcess,&hMod,sizeof(hMod),&pocMod))
     {
         GetModuleBaseName( hProcess, hMod, procName, sizeof(procName)); 
     }
     if( strcmp(z,procName) == 0 ) p++;
     #if ShowProcess
     if( strcmp(z,procName) == 0 ) printf("%s  << Vlastny proces ( Ja )\n",procName);
     else printf("%s\t\t%d\n",procName,procesy[i]);
     #endif
    }
    #if ShowProcess
    putchar('\n');
    #endif
    return p;
}

int main(int argc, char *argv[] )
{
    
    
  int ip=  i_runned(argv[0]);
  printf("Som spusteny %i-krat\n",ip);
    system("Pause");
    return 0;
}

Napísať odpoveď