datei kopieren mit CopyFile()



  • hi leute,

    ich möchte eine datei in den Windows ordner kopieren.

    warum geht das hier nicht?

    TCHAR szFolderName[MAX_PATH];
    	TCHAR szFolderNameofTool[MAX_PATH];
    	GetCurrentDirectory(MAX_PATH, szFolderNameofTool);
    	GetWindowsDirectory(szFolderName, MAX_PATH);
    	wcscat_s(szFolderName, MAX_PATH, _T("MyCmd.exe"));
    	wcscat_s(szFolderNameofTool, MAX_PATH, _T("MyCmd.exe"));
    	CopyFile(szFolderNameofTool, szFolderName, TRUE);
    

    CopyFile gibt mir auch den Wert 0 zurück. Also ein Fehler.


  • Mod

    Es ist immer gut die Doku zu lesen:
    http://msdn.microsoft.com/en-us/library/aa363851(VS.85).aspx

    Wenn es schief geht: Was sagt GetLastError?

    Meine Kristallkuegl lässt mich schemenhaft erkennnen, dass Du Windows Vista oder Windows 7 einsetzt und Du nicht genügend Rechte hast. Sprcih Dein Programm wurde nicht als Admin gestartet und hat somit keine Rechte nach C:\Windows zu schreiben 🕶



  • ja das ist warscheinlich so...

    und wie starte ich das mit admin rechten? gibt es da funktionen für?
    da kommt doch dann ein fenster wo um erlaubnis gefragt wird.
    wie kann ich das mit einbinden?

    ausserdem bin ich auf dem pc kein eingeschränkter benutzer.
    gibt es da eig noch sowas wie, ich nenn es jetzt mal "höhere administratorrechte" oder warum ist das so?


  • Mod

    Zuviele Fragen und zu wenig gegoogelt... oder ? 🕶

    Lies Dich in UAC ein, hier mal ein Anfang:
    http://blog.m-ri.de/index.php/2006/12/12/vista-und-die-notwendigkeit-eines-manifestes-fur-die-uac/

    Du hastmit Sicherheit nur eine eingeschränkte Session. Das ist ja der TRick an UAC. Deine Admin Rechter werden aus Deinem normalen Beunutzertoken entfernt. Die Zugriffrechte bekommst Du nur wenn das Programm "als Admin" also elevated gestartet wird.

    Entweder startest Du also Dein Programm als Admin (Rechter Mausklick) oder zu verpasst ihm ein requireAdmin Manifest.



  • hätte da noch ein paar fragen zu den Manifesten.

    1. Muss das Manifest in Unicode geschrieben sein, wenn das Programm auch Unicode ist?

    2. Ich finde keine Anleitung für VC++ 2010, wie ich dort eine Manifestdatei mit einbinde, kennt da einer ein gutes Toturial?


  • Mod

    Manifeste werden in VS-2010 und VS-2008 automatisch eingebunden.

    Die entsprechenden Einsellungen welches Art von UAC Manifest verwendet wird findet man in den Projekteinstellungen.

    Die findest die Einstellungen für das UAC Manifest direkt in den Linker Projekteinstellungen:
    Linker -> Manifest File

    Ob und wie ein Manifest erzeugt wird steht auch in den Projekteinstellungen unter:
    Manifest Tool

    Ansonsten ist ein Manifest eine XML Datei und es gelten die entsprechenden Regeln für den Zeichensatz, wenn du aber die Projekteinstellungen entsprechende benutzt mach VS alles für Dich.



  • Martin Richter schrieb:

    Ansonsten ist ein Manifest eine XML Datei und es gelten die entsprechenden Regeln für den Zeichensatz, wenn du aber die Projekteinstellungen entsprechende benutzt mach VS alles für Dich.

    habe gestern irgentwo gelesen das eine Manifestdatei die Endung .exe.manifest hat ,das stimmt also nicht?


  • Mod

    Warum sollte das nicht stimmen? Weil es eine Datei im XML Format ist, muss diese doch nicht auch eine entsprechende Endung haben 😉

    Ja. Ein Manifest kann die Endung .manifest haben, sofern Du ein externes Manifest hast. Interne Maifeste werden in den Ressourcen abgelegt.



  • ich bekomms nicht hin... gibt es nicht irgentwo eine anleitung für visual c++. also wo auch steht wie das mit den manifesten geht?


  • Mod

    metapoint2011 schrieb:

    ich bekomms nicht hin... gibt es nicht irgentwo eine anleitung für visual c++. also wo auch steht wie das mit den manifesten geht?

    Bitte detailiert:
    Was bekommst Du nicht hin?
    Was hat Du gemacht?
    Was funktioniert nicht?

    Ich habe Dir oben die Einstellungen im Projekt für VS-2010 detailiert oben beschrieben...



  • im linker unter Manifestdatei steht es jetzt so und es wird nicht als Admin gestartet:

    Manifest generieren: JA
    
    Manifestdatei: $(IntDir)$(TargetName)........
    
    Zusätzliche Manifestabhängigkeiten: 
    
    Isolation zulassen: JA(/ALLOWISOLATION)
    
    Benutzerkontensteuerung (UAC) aktivieren: JA
    
    UAC Ausführungsebene: requireAdministrator (/level='requireAdministrator')
    
    Schutz vor Umgebung der Benutzeroberfläche für die Benutzerkontensteuerung: NEIN
    


  • ups.. jetzt gehts auf einmal.. sorry klappt schon.

    ich danke dir für deine hilfe


Anmelden zum Antworten