Възможно ли е да се потисне известието на Windows след присвояване на буквата на устройството

Имам неформатиран твърд диск, на който чрез код създадох един дял, зададох буква на устройството и накрая форматирах твърдия диск (като 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 е леко раздразнение, може би дори желателно.

мисли?


person Sarah Weinberger    schedule 09.06.2018    source източник
comment
Бих го форматирал, преди да присвоя буквата на устройството.   -  person Ben Voigt    schedule 09.06.2018
comment
Ако използвате WMI, можете да избегнете стартирането на отделен процес diskpart.exe. MSFT_Volume има Format() метод и MSFT_Partition има AddAccessPath() , за да зададете буквата на устройството.   -  person Ben Voigt    schedule 09.06.2018
comment
@BenVoigt Въпреки че комбинираният код, вижте моята актуализация на въпроса, все още създава полето за съобщения, показано по-горе, аз съм ви благодарен, че ме накарахте да направя ново търсене. Това, което не разбрах преди, е, че пропускам ACTIVE преди формата и че операторът ASSIGN идва след формата. Малка крачка напред.   -  person Sarah Weinberger    schedule 10.06.2018
comment
@SarahWeinberger Има съществуващ въпрос по тази тема. Може ли да ви помогне? stackoverflow.com/questions/15211900/   -  person Smartis    schedule 10.06.2018
comment
@Smartis Благодаря ви, че посочихте статията. Този друг потребител формулира добре темата, че потребителят може действително да причини щети, като отговори на полето за форматиране. За съжаление, приетият отговор за Windows Server 2008R2 е да форматирате устройството с помощта на DiskPart и след това да присвоите буквата на устройството. Правя това сега в актуализирания код, но все още същият проблем на Win10. Спирането на услугата за откриване на HW кара кожата ми да пълзи и да използвам CreateNoWindow за true, вече го правя.   -  person Sarah Weinberger    schedule 10.06.2018
comment
Мислех, че отговорът е да премахна оператора ACTIVE от скрипта DiskPart.exe, тъй като това беше единствената разлика, която видях между приетия отговор в другата публикация и моя преработен скрипт. Допълнителни тестове показаха, че поне на Win10 Pro все още виждам изскачащото поле за съобщения и други известия. Това е тъжно. Искрено смятах, че ACTIVE е виновникът. О, добре.   -  person Sarah Weinberger    schedule 11.06.2018