-1

C++ から icacls を実行しようとしています。以下のコードは何もしません。なぜそれが何もしないのかはまだわかりません。cmd ウィンドウが自動的に閉じてしまうため、どの icacls が返されるのかわかりません。HINSTANCEもあまり提供しません。複数のパラメーターで icacls を使用するにはどうすればよいですか?

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

3 に答える 3

1

パラメータにはlpFileおそらく拡張子が必要です。 "icacls.exe".exe

また、常にエラーをチェックする必要があります。ShellExecute()成功すると、32 より大きい値が返されます。返される可能性があるエラー コードの一覧については、MSDN を参照してください。

于 2011-11-13T02:46:52.407 に答える
0

削除を取り消す投稿:

このコードは以前に作成しましたが、残念ながらCLR/.NET固有です。ただし、「API」の使用は難しいと公言しているので(つまり、10年前に使用しましたが、NTFS ACLSはピクニックではありません)、以下のサンプルに動機付けられて、.NETコード(C ++ / CLIまたは相互運用ベース?)


C#コードを使用しない特定の理由はありますか?

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

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

MSDNの次のヘルパーを使用します。方法:アクセス制御リストのエントリを追加または削除します

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);
}

詳細とコメントについては、記事を参照してください

于 2011-11-12T22:50:42.220 に答える
0

icaclsテスト目的で、 からの出力を次のようにラップして確認できますcmd /k

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

【なぜgrant:r?】

于 2011-11-13T21:37:17.760 に答える