Имам неформатиран твърд диск, на който чрез код създадох един дял, зададох буква на устройството и накрая форматирах твърдия диск (като NTFS).
Кодът работи добре, но Windows показва следния изскачащ прозорец, както и показва уведомително съобщение след форматиране и отваряне на Windows Explorer на това устройство. Бих искал поне да няма изскачащо съобщение за известие.
Ето кода, само за да ви дам представа какво правя.
Process oProcess = new Process();
...
StringBuilder sb = new StringBuilder();
sb.AppendLine($"SELECT DISK={disk}");
sb.AppendLine($"SELECT PARTITION {partition}");
sb.AppendLine($"ASSIGN LETTER={driveNext}");
sb.AppendLine($"EXIT");
// Write the script to a file.
String fileScript = Path.GetTempFileName();
fileScript = Path.ChangeExtension(fileScript, @"scr");
pathScript = Path.Combine(Path.GetTempPath(), fileScript);
File.WriteAllText(pathScript, sb.ToString());
// Set process start information.
ProcessStartInfo oProcessStartInfo = new ProcessStartInfo()
{
FileName = @"diskpart.exe",
Arguments = $"/s {pathScript}",
CreateNoWindow = true,
// Set UseShellExecute to false for redirection of the standard output.
UseShellExecute = false,
// Redirect standard input as well. This stream is used asynchronously.
RedirectStandardOutput = true,
RedirectStandardInput = true,
};
// Start the process setting our event handler to asynchronously read the command standard output.
oProcess.StartInfo = oProcessStartInfo;
...
oProcess.Start();
...
// Wait for the process to complete.
oProcess.WaitForExit();
...
Това, което искам, е безшумно потребителско изживяване и липса на прозорци и известия, летящи към потребителя, включително областта за уведомяване в Windows 10. Мисля, че може би има промяна в системния регистър, която мога временно да направя по време на операцията за заглушаване на Windows. Може би има нещо друго.
Възможно ли е временно да заглушите Windows и ако да, как?
UPDATE 2
Smartis препоръчва този въпрос, тъй като е същият като този въпрос. Този потребител формулира въпроса добре, че потребителят може действително да причини щети, като отговори на формата.
Приетият отговор, а именно да форматирам устройството с DiskPart.exe
и след това да присвоя буквата на устройството, е това, което правя сега, вижте Актуализация 1 по-долу. Този подход очевидно работи с Windows Server 2008R2, но не работи с моето копие на Windows 10 Professional X64. Да, създавам друг процес с CreateNoWindow, зададен на true.
Този потребител каза, че един от отговорите би бил да спре услугата за откриване на хардуер, но това не е решение, което той би достойно поставил в код. Съгласен съм. Надявам се, че това не е единственият начин, така че ето ни отново.
мисли?
UPDATE 1
Не се сетих да спомена друг малък проблем по-рано, но въз основа на коментара на Бен и новите изследвания сега съм.
Първоначално исках да форматирам диска в командата DiskPart.exe
, но това не успя. Няколкото сайта, които разгледах, дадоха следния код:
sb.AppendLine($"SELECT DISK={disk}");
sb.AppendLine($"SELECT PARTITION {partition}");
sb.AppendLine($"ASSIGN LETTER={driveNext}");
sb.AppendLine($"FORMAT FS=NTFS LABEL='{diskLabel}' QUICK");
sb.AppendLine($"EXIT")
След това направих ново проучване след коментара на Бен и стигнах до тази статия, която реши по-ранния проблем с форматирането на диска и присвояването на буквата на устройството в едно DiskPart.exe
извикване.
Ето работещ DiskPart.exe
скрипт за присвояване на буква на устройство и форматиране на диска. Колкото и да си струва, в този скрипт, който не е показан, аз също създавам дяла.
sb.AppendLine($"SELECT DISK={disk}");
sb.AppendLine($"SELECT PARTITION 1");
sb.AppendLine($"ACTIVE");
sb.AppendLine($"FORMAT FS=NTFS LABEL='{diskLabel}' QUICK");
sb.AppendLine($"ASSIGN LETTER={driveNext}");
sb.AppendLine($"EXIT");
Първоначалният проблем беше, че нямах реда ACTIVE
и второ, че поставих реда ASSIGN
след реда FORMAT
.
За съжаление, все още виждам полето за съобщения и известието, въпреки че известието в областта за уведомяване на Windows 10 е леко раздразнение, може би дори желателно.
мисли?
MSFT_Volume
имаFormat()
метод иMSFT_Partition
имаAddAccessPath()
, за да зададете буквата на устройството. - person Ben Voigt   schedule 09.06.2018