SajjadKhati
کاربر فعال <A href="http://forum.majidonline.com/f
شما خودتون در Main با کدی که هست فرمی رو نمایش میدهید، اگه کدی نباشه که نخ دیگه کاری برای انجام نداره و برنامه بسته میشه. یعنی بسته شدن برنامه کاری نیست که کد لازم داشته باشه. در فرم ها هم که نوشتم، با Application.Exit بسته میشه. مشکل کد شما اینه که به ظاهر اصلا برایش دسترسی ادمین نیاز نیست. اینجا یکبار و چند بار معنی نداره. چرا فکر می کنید کدتون باید یکبار اجرا بشه؟ ممکنه همون یکبار هم اضافی باشه. کد شما که اصلا کاری با دسترسی ادمین بودنش نداره، چک نمی کنه که دسترسی داره یا نه. اگر کاربر خودش برنامه رو شما رو با دسترسی ادمین اجرا کرد چه مرضی داریم که مجددا یکبار اجراش کنیم؟
حالا این به کنار، شما می توانید موقع اجرا کردن پروسه در همون ProcessStartInfo یک Arguments دلخواهی فرضا "admin" مشخص کنید که موقع اجرا شدن برنامه در Environment.GetCommandLineArgs و Environment.CommandLine قابل دسترسی ئه. اولین پارامتر اسم فایل اجرایی برنامه است و آرگومان در ادامه اش قرار میگیره. در Main می توانید اون آرگومان رو جستجو کنید تا اگر پیدا نشد، متوجه شوید که فراخوان برنامه خودتون نیست و نیازه فراخوانیش کنید. گرچه کد اشتباه با هر استدلالی اشتباهه.
ممنون استاد علی
آها یه همچین چیزی میخواستم .
پس در Process.Start ، در دومین ورودی اش (یعنی ورودی ای بنام argument ، یه آرگومان دلخواه بدم) و بعد در تابع main میتونم با Environment.GetCommandLineArgs ، اونو چک کنم که همون هست یا نه .
شما فقط بخاطر این میگین اصولی نیست که مثلا کاربر در uac اجازه ی دسترسی ادمین را نده؟ چون دسترسی ادمین برنامه از طریق کدنویسی (همین کد) را در انجمن مایکروسافت داده بودن
فرض کنید که می خواهید با برنامه تان فایل rar بسازید یا از حالت فشرده خارج کنید. دو تا گزینه دارید، یا از کمپوننت و کتابخانه های موجود استفاده می کنید و یا با دستورات command line با rar.exe کار می کنید. طبعا هم موقع کار با command line یکسری محدودیت ها پیدا می کنید، چون در کمپوننت ها مراحل اجرا تکه تکه بود و می توانستید کارهای زیادی رو انجام بدید و روی روال اجرا هم تسلط داشتید، اما در Command Line همون اول یک دستوری می دهید و تا دستور تموم نشده نه می توانید تغییری در روال بدهید و نه از پیشرفت کار با خبر می شوید. در مورد بعضی Command Line ها می توانید از ProcessStartInfo.RedirectStandardOutput کمک بگیرید تا اگر اون فرمان خروجی متنی مناسب پردازشی داره داخل برنامه تون دریافتش کنید، اما در مورد خیلی از Command Line ها حتی اینکار هم نتیجه مناسبی نداره. حالا در مورد VSS هم همین قضیه است. شما همیشه می توانید با Process.Start یک فرمان Command Line رو به یک فایل اجرایی بدهید اما تسلطی که در حین انجام کار دارید ممکنه خیلی کم باشه. اگر می خواهید در مورد کار با Command Line آشنا بشید، اول با یک نمونه ساده تر مثل C:\Windows\System32\PING.EXE تمرین کنید که سوئیچ های پیچیده و مشکل سازی نداره و سریع هم به جواب میرسه و سیستمی هم نیست که رویش کار نکنه. اگر بخواهید از اول با یک برنامه و سرویس های پیچیده تمرین کنید مشکلات تون چند برابر میشه.
آها یعنی یه فایلی هست بنام vssadmin.exe و دستورات مختلفی میگیره (مثل PING.EXE که گفتید یا cmd.exe) که اون دستوراتی که توی اون سایت دادم را باید با Process.Start ، این فایل را اجرا کنیم و در دومین ورودی اش (یعنی ورودی ای بنام argument) ، اون دستورات را بدم؟
خوب یعنی اون دستورات را نمیشه در alphavss wrapper داد؟ یعنی یک تابعی ، چیزی نیست که اون دستورات را ساپورت کنه که از اون دستورات در alphavss استفاده کرد؟
یا توی vss api خود ویندوز ( منظورم بدون استفاده از رپر و alphavss هست . یعنی توابع نوشته شده در ویندوز با ++C) ، یه تابعی یا عضوی نیست که این دستورات را ساپورت کنه؟
بعد اینکه این vssadmin.exe را از کدوم سایت میشه دانلود کرد؟ من چرخیدم ، ولی جایی ، لینک دانلودی نداشت .
ممنون