| 分類:[C#]
お久しぶりのゆーちです。 C#でファイルのMoTW(Mark of The Web)を設定するプログラムを書いてます。 具体的には Outlook 用の Addin ソフトです。 中身は PowerShell にコマンド投げているだけです。
// "system.management.automation.dll.10.0.10586.nupkg" からインストールした System.Management.Automation を使用してます。 using System.Management.Automation;
string format = "Set-Content -Path \"{0}\" -Stream Zone.Identifier -Encoding oem -NoNewline -Value \"[ZoneTransfer]`r`nZoneId=3\""; string cmd_line = string.Format(format, filePath); using (var invoker = new RunspaceInvoke()) { Collection<PSObject> results = invoker.Invoke(cmd_line, new object[] { }); foreach (PSObject result in results) { } }
このコードで、xlsx ファイルや pptx ファイルなどにはちゃんと MoTW が付加されるのですが。 bat, exe などの実行ファイルでは、エラーや例外もなくMoTWが付加されない現象で悩んでおります。
PowerShell のコンソールで同じコマンドを投げると、ちゃんと設定できちゃうんです。
string set_policy = "Set-ExecutionPolicy -Scope CurrentUser RemoteSigned"; こんなコードでPowerShellを呼び出し、ポリシーを変更したりもしましたが、同様です。
ちなみに、Process.Start() では機能しなかったので System.Management.Automation.RunspaceInvoke()を使いました。
Outlook が悪さをしてるのかなぁ・・・ なにか心当たりや情報をご存知の方おられましたら、教えてくださいまし。 よろしくお願いします。 |