Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: Lưu giá trị biến sau khi thoát chương trình

  1. #1
    Ngày gia nhập
    05 2012
    Nơi ở
    binh duong
    Bài viết
    2

    Mặc định Lưu giá trị biến sau khi thoát chương trình

    Em mới học c# nên hơi gà mong các anh chỉ dùm em cái này với.
    Em muốn trong quá trình làm việc sẽ có 1 số biến thay đổi. sau khi tắt chương trình nó sẽ lưu giá trị mới của biến đó lại, để lần sau mở chương trình lên thì nó lấy biến đó dùng tiếp thì phải làm sao vậy
    Thank all
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  2. #2
    Ngày gia nhập
    11 2013
    Bài viết
    8

    Mình không chuyên về C# lắm, hay làm C++ hơn.
    Nhưng về cơ bản muốn lưu lại thông tin để lần sau chạy, kiểu file config. Thì 1 là lưu và DB , 2 là lưu vào file text. Đơn giản nhất thì ghi vào 1 file text, khi chương trình chạy thì load các thông tin đó từ file text lên thôi!

  3. #3
    Ngày gia nhập
    11 2007
    Nơi ở
    Hà Nội
    Bài viết
    520

    có thể lưu vào file text hoặc dùng registry bạn nhé

  4. #4
    Ngày gia nhập
    06 2009
    Bài viết
    422

    lưu registry mà dùng win 7, bật UAC thì tắt điện nhé

  5. #5
    Ngày gia nhập
    04 2012
    Bài viết
    4

    Chào bạn,
    Theo mình nghĩ bạn có thể lưu vào file text, XML, hay lưu trong CSDL luôn ^^
    Bình thường mình vẫn lưu trong CSDL.
    Mong giúp được bạn. ^^

  6. #6
    Ngày gia nhập
    11 2013
    Nơi ở
    Thái Nguyên, Vietnam
    Bài viết
    16

    Mặc định Lưu giá trị biến sau khi thoát chương trình

    lưu vào file text hoặc xml đi bạn. dùng registry ai ngta bật UAC lên thì hài lắm :v

  7. #7
    Ngày gia nhập
    11 2007
    Nơi ở
    Hà Nội
    Bài viết
    520

    Trích dẫn Nguyên bản được gửi bởi Riku Xem bài viết
    lưu registry mà dùng win 7, bật UAC thì tắt điện nhé
    Trích dẫn Nguyên bản được gửi bởi shirai91 Xem bài viết
    lưu vào file text hoặc xml đi bạn. dùng registry ai ngta bật UAC lên thì hài lắm :v
    Có vẻ như 2 bạn chưa tìm hiểu xem UAC tác động đến khu vực nào của hệ thống nhỉ?

    Mình có làm 1 đoạn Demo, 2 bạn build rồi thử chạy nhé, xem có bị tắt điện không :v.
    Với windows 7 hoặc Vista thì test cả 2 trường hợp bật hoặc tắt UAC .
    Nếu có windows XP thì có thể test luôn 2 trường hợp: chạy với quyền administrator và quyền Limited.

    Registry trong windows là khu vực được thiết kế để lưu cấu hình của hệ thống, và các chương trình ứng dụng. UAC chỉ phân quyền cho từng khu vực bên trong Registry thôi. Ứng dụng được phép ghi vào khu vực phù hợp với quyền của nó.

    Visual C++ Code:
    1. #include <Windows.h>
    2. #include <tchar.h>
    3. #pragma comment (lib, "Advapi32.lib")
    4.  
    5. #define MAX_STRING 255
    6.  
    7. //************************************
    8. // This routine returns TRUE if Windows is Vista or higher.
    9. BOOL IsVistaOrNewer(void)
    10. {
    11.     OSVERSIONINFOEX versionInfo = {};
    12.     // Get windows version
    13.     if (FALSE == GetVersionEx((LPOSVERSIONINFO)&versionInfo))
    14.         return FALSE;
    15.  
    16.     return (versionInfo.dwMajorVersion >= 6); // Vista Major Version is 6
    17. }
    18.  
    19. //************************************
    20. // This routine returns TRUE if the caller's
    21. // process is a member of the Administrators local group
    22. // Return Value:
    23. // TRUE - Caller has Administrators local group.
    24. // FALSE - Caller does not have Administrators local group.
    25. BOOL IsUserAdmin(void)
    26. {
    27.     BOOL bResult;
    28.     SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
    29.     PSID AdministratorsGroup;
    30.  
    31.     // get user SID
    32.     bResult = AllocateAndInitializeSid(
    33.         &NtAuthority,
    34.         2,
    35.         SECURITY_BUILTIN_DOMAIN_RID,
    36.         DOMAIN_ALIAS_RID_ADMINS,
    37.         0, 0, 0, 0, 0, 0,
    38.         &AdministratorsGroup);
    39.     if(bResult)
    40.     {
    41.         // Check Admin Group
    42.         if (!CheckTokenMembership( NULL, AdministratorsGroup, &bResult))
    43.             bResult = FALSE;
    44.  
    45.         FreeSid(AdministratorsGroup);
    46.     }
    47.  
    48.     return(bResult);
    49. }
    50. //************************************
    51. // This routine returns TRUE if the caller's
    52. // process has administrator rights. (Vista or higher)
    53. BOOL IsUserElevated(void)
    54. {
    55.     BOOL bResult = FALSE; // assume an error occurred
    56.     HANDLE hToken   = NULL;
    57.  
    58.     TOKEN_ELEVATION te = { 0 };
    59.     DWORD dwReturnLength = 0;
    60.  
    61.     // Query process token
    62.     if ( !OpenProcessToken( GetCurrentProcess(), TOKEN_QUERY, &hToken ) )
    63.         return FALSE;
    64.  
    65.     // Get token info
    66.     if ( GetTokenInformation( hToken, TokenElevation, &te, sizeof( te ), &dwReturnLength ) &&
    67.         (dwReturnLength != sizeof( te )) )
    68.     {
    69.  
    70.         bResult = (te.TokenIsElevated != 0);
    71.     }
    72.  
    73.     CloseHandle( hToken );
    74.  
    75.     return bResult;
    76. }
    77. //************************************
    78. // This routine returns TRUE if the caller's
    79. // process has administrator rights.
    80. BOOL CheckUac(void)
    81. {
    82.     if (IsVistaOrNewer())
    83.         return IsUserElevated();
    84.     else
    85.         return IsUserAdmin();
    86. }
    87.  
    88. int _tmain(int argc, TCHAR **argv)
    89. {
    90.     HKEY hKey = NULL;
    91.     size_t nStrSize = 0;
    92.     TCHAR szInputStr[MAX_STRING + 1] = {};
    93.  
    94.     // check process rights
    95.     if (CheckUac())
    96.         _tprintf(_T("Process has administrator rights.\n"));
    97.     else
    98.         _tprintf(_T("Process has limited rights.\n"));
    99.  
    100.     // get user data
    101.     _tprintf(_T("Enter a string:"));
    102.     _getts_s(szInputStr, MAX_STRING);
    103.  
    104.     nStrSize = _tcscnlen(szInputStr, MAX_STRING);
    105.  
    106.     if (nStrSize == 0)
    107.     {
    108.         _tprintf(_T("An empty string!"));
    109.         return 0;
    110.     }
    111.     _tprintf(_T("\n"));
    112.  
    113.     // open Registry to write
    114.     if (ERROR_SUCCESS ==
    115.         RegCreateKeyEx(
    116.             HKEY_CURRENT_USER,
    117.             _T("Software\\RegTest"),
    118.             0,
    119.             NULL,
    120.             REG_OPTION_NON_VOLATILE,
    121.             KEY_WRITE,
    122.             NULL,
    123.             &hKey,
    124.             NULL))
    125.     {
    126.         // write data
    127.         if (ERROR_SUCCESS ==
    128.                 RegSetValueEx(
    129.                     hKey,
    130.                     _T("RegTest"),
    131.                     0,
    132.                     REG_SZ,
    133.                     (const BYTE*) szInputStr,
    134.                     sizeof(TCHAR) * (nStrSize + 1) ))
    135.            
    136.         {
    137.             _tprintf(_T("Your string is written to Registry.\n\tPath: HKEY_CURRENT_USER\\Software\\RegTest"));
    138.         }
    139.         else
    140.         {
    141.             _tprintf(_T("Can not write to Registry"));
    142.         }
    143.        
    144.         RegCloseKey(hKey);
    145.     }
    146.     else
    147.         _tprintf(_T("Can not open Registry to write"));
    148.  
    149.     return 0;
    150. }

  8. #8
    Ngày gia nhập
    11 2010
    Nơi ở
    Quảng Trị <-> HCM
    Bài viết
    28

    Trong project có mục Properties/Settings.setting bạn click vào đó để lưu tên biến và giá trị của nó vào. Khi chạy chuơng trình thì load dữ liêu từ đó lên rồi đưa vào biến của bạn, sau đó nếu có thay đổi thì bạn lưu lại

  9. #9
    Ngày gia nhập
    11 2013
    Nơi ở
    Thái Nguyên, Vietnam
    Bài viết
    16

    quangnh89;646004]Có vẻ như 2 bạn chưa tìm hiểu xem UAC tác động đến khu vực nào của hệ thống nhỉ?

    Mình có làm 1 đoạn Demo, 2 bạn build rồi thử chạy nhé, xem có bị tắt điện không :v.
    Với windows 7 hoặc Vista thì test cả 2 trường hợp bật hoặc tắt UAC .
    Nếu có windows XP thì có thể test luôn 2 trường hợp: chạy với quyền administrator và quyền Limited.

    Registry trong windows là khu vực được thiết kế để lưu cấu hình của hệ thống, và các chương trình ứng dụng. UAC chỉ phân quyền cho từng khu vực bên trong Registry thôi. Ứng dụng được phép ghi vào khu vực phù hợp với quyền của nó.
    ý mình là ko biết dùng thì sẽ hài, khối người sẽ không biết nên lưu vào phần nào của registry và thế là...topic mới xuất hiện.
    p/s: code bạn rất hay nhưng mình thích code C# bên topic C# hơn
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

Các đề tài tương tự

  1. Lập trình C Thay đổi giá trị của biến toàn cục sau khi thoát hàm.
    Gửi bởi vietthang267 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 29-11-2012, 12:10 PM
  2. Kỹ thuật C Thoát khỏi for biến có được giữ lại không
    Gửi bởi ghost.love trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 9
    Bài viết cuối: 25-09-2011, 01:19 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn