saber67
دوشنبه 19 فروردین 1392, 12:33 عصر
یه خط از برنامه من به شکل زیره، اگه کامپوننت مورد استفاد برنامه توی ویندوز نباشه اون کامپوننت رو تو پوشه ویندوز کپی می کنه
FileCopy App.Path & "\COMCTL32.OCX", "C:\Windows\System32\COMCTL32.OCX"
تو ویندوز 7 اگه اکانت Admin باشه مشکلی نیست و برنامه راحت می تونه کارش رو انجام بده اما وقتی برنامه توی ویندوز 8 (حتی اکانت با مجوز Admin) اجرا میشه خطای دسترسی میده و باید برنامه به صورت Run as administator اجرا بشه تا خطا نده
عکس خطا رو ضمیمه کردم، خطای شماره 75
همون طور که از متن پیغام مشخصه، خطا مربوط به اجازه دسترسی میشه
البته این خطا وقتی رخ میده که برنامه بخواد فایلی رو در مسیر System32 (و احتمالا جاهای دیگه که امنیتی به حساب میان و محافظت شده هستن) کپی کنه و اگه مسیرش جای دیگه ای باشه مشکی نیست و به راحتی کپی میشه (مثلا کپی کنیم تو درایو D)
اینم بگم که برای کپی از دو روش دیگه هم استفاده کردم
هم از API:
Private Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
هم از ریفرنس Microsoft Scripting Runtime به این شکل:
Dim fso As New FileSystemObject
fso.CopyFile DLLSourcePath, DLLDestinationPath, True
اما همون FileCopy خود VB از هر دو بهتره، حداقل پبغام خطای درست و حسابی بر می گردونه
حالا سوال من اینه که
یا روش بهتری باشه که بدون مجوز Admin بتونیم فایل رو تو اون مسیر کپی کنیم
یا روشی که برنامه خودش به صورت Run as administator اجرا بشه
آیا روشی هست؟
البته میشه با مدیریت درونی خطا به کاربر پیغام مناسب رو داد و مثلا بهش اعلام کرد که برنامه رو به صورت Run as administator اجرا کنه اما زیاد روش جالبی نیست!
FileCopy App.Path & "\COMCTL32.OCX", "C:\Windows\System32\COMCTL32.OCX"
تو ویندوز 7 اگه اکانت Admin باشه مشکلی نیست و برنامه راحت می تونه کارش رو انجام بده اما وقتی برنامه توی ویندوز 8 (حتی اکانت با مجوز Admin) اجرا میشه خطای دسترسی میده و باید برنامه به صورت Run as administator اجرا بشه تا خطا نده
عکس خطا رو ضمیمه کردم، خطای شماره 75
همون طور که از متن پیغام مشخصه، خطا مربوط به اجازه دسترسی میشه
البته این خطا وقتی رخ میده که برنامه بخواد فایلی رو در مسیر System32 (و احتمالا جاهای دیگه که امنیتی به حساب میان و محافظت شده هستن) کپی کنه و اگه مسیرش جای دیگه ای باشه مشکی نیست و به راحتی کپی میشه (مثلا کپی کنیم تو درایو D)
اینم بگم که برای کپی از دو روش دیگه هم استفاده کردم
هم از API:
Private Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
هم از ریفرنس Microsoft Scripting Runtime به این شکل:
Dim fso As New FileSystemObject
fso.CopyFile DLLSourcePath, DLLDestinationPath, True
اما همون FileCopy خود VB از هر دو بهتره، حداقل پبغام خطای درست و حسابی بر می گردونه
حالا سوال من اینه که
یا روش بهتری باشه که بدون مجوز Admin بتونیم فایل رو تو اون مسیر کپی کنیم
یا روشی که برنامه خودش به صورت Run as administator اجرا بشه
آیا روشی هست؟
البته میشه با مدیریت درونی خطا به کاربر پیغام مناسب رو داد و مثلا بهش اعلام کرد که برنامه رو به صورت Run as administator اجرا کنه اما زیاد روش جالبی نیست!