2011-11-12 5 views
-1

C++からicaclsを実行しようとしています。以下のコードは何もしません。私はまだそれが何もしない理由を知らない。私はcmdのウィンドウが自動的に閉じられるので、icaclsが私に戻ってくるのを見ることができません。 HINSTANCEはまた私に多くを提供しません。私はどのように複数のパラメータでicaclsを使用できますか?ShellExecuteを使用して複数のパラメータでicaclsを実行する

HINSTANCE hInst = ShellExecute(NULL, 
NULL, 
L"icacls", 
L"s.jpg /grant:r %username%:W",  
L"C:/",  
SW_NORMAL 
); 
+2

。おそらく、適切なWin32 APIを呼び出すほうがよいでしょうか? – Neil

+0

win32 Apisを使用するのはあなたの考えるよりも難しいです。それも試してみましたが、そこにも多くはできませんでした。 – user1042321

+0

'hInst'をチェックしてエラーが発生していないかどうか確認しましたか?関数が成功すると、32より大きい値が返されます。 – philipvr

答えて

0

削除の取り消しポスト:私はこのコードのビット以前まで書かれていた

は、残念ながらそれは、CLR/.NET固有のものです。しかし、あなたは 'the API'を使用することは難しいと主張しているので(10年前に行ったことですが、NTFS ACLSはpicknickではありません)、下記のサンプルで動機づけられて、.NETコード(C++/CLIまたはInteropベース?)


C#コードを使用しない特定の理由はありますか? MSDN: How to: Add or Remove Access Control List Entriesから次のヘルパーで

AddFileSecurity(fileName, @"DomainName\AccountName", 
     FileSystemRights.ReadData, AccessControlType.Allow); 

RemoveFileSecurity(fileName, @"DomainName\AccountName", 
     FileSystemRights.ReadData, AccessControlType.Allow); 

public static void AddFileSecurity(string fileName, string account, 
     FileSystemRights rights, AccessControlType controlType) 
{ 
    FileSecurity fSecurity = File.GetAccessControl(fileName); 
    fSecurity.AddAccessRule(new FileSystemAccessRule(account, 
       rights, controlType)); 
    File.SetAccessControl(fileName, fSecurity); 
} 

public static void RemoveFileSecurity(string fileName, string account, 
     FileSystemRights rights, AccessControlType controlType) 
{ 
    FileSecurity fSecurity = File.GetAccessControl(fileName); 
    fSecurity.RemoveAccessRule(new FileSystemAccessRule(account, 
       rights, controlType)); 
    File.SetAccessControl(fileName, fSecurity); 
} 

完全な詳細についての記事を参照してください

+0

クライアントがC++コードを要求しています – user1042321

1

あなたlpFileパラメータは、おそらく.exe拡張子を持つ"icacls.exe"する必要がありますコメントしています。

また、エラーを常に確認する必要があります。 ShellExecute()が成功すると、32より大きい値が返されます。返されるエラーコードのリストについては、MSDNを参照してください。

0

テスト目的のために、あなたはcmd /kでそれをラップすることにより、icaclsからの出力を見ることができます。

HINSTANCE hInst = ShellExecute(NULL, 
    NULL, 
    L"cmd", 
    L"/k icacls s.jpg /grant %username%:W", 
    L"C:/", 
    SW_NORMAL 
); 

[なぜgrant:r?]あなたは、バッチファイルを書いていない

+0

ありがとうございました。 rを置き換えます – user1042321

+0

@ user1042321書き込み専用のアクセスは珍しい選択です... – Neil

関連する問題